【问题标题】:EF6 foreign key constraint in simple model简单模型中的 EF6 外键约束
【发布时间】:2014-09-02 08:46:03
【问题描述】:

我正在编写一个简单的 MVC 5 互联网应用程序。这是我的模型:

public class House
{
    [Key]
    public int Id { get; set; }
    public string name { get; set; }
    public virtual ICollection<Room> rooms { get; set; }
    public int itemId { get; set; }
    public virtual Item item { get; set; }

    public House()
    {
        rooms = new List<Room>();
    }
}

public class Room
{
    [Key]
    public int Id { get; set; }
    public int roomNumber { get; set; }

    public int houseId { get; set; }
    public virtual House house { get; set; }

    public int itemId { get; set; }
    public virtual Item item { get; set; }
}

public class Item
{
    [Key]
    public int Id { get; set; }
    public string name { get; set; }
}

当我在 House 控制器中加载索引操作结果时,我收到此错误:

Introducing FOREIGN KEY constraint 'FK_dbo.Rooms_dbo.Items_itemId' on table 'Rooms' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint or index. See previous errors.

我能帮我正确编码吗?

提前致谢

编辑

我现在已将ForeignKey 属性添加到字段外键字段中:

public class House
{
    [Key]
    public int Id { get; set; }
    public string name { get; set; }
    public virtual ICollection<Room> rooms { get; set; }
    public int itemId { get; set; }
    [ForeignKey("itemId")]
    public virtual Item item { get; set; }

    public House()
    {
        rooms = new List<Room>();
    }
}

public class Room
{
    [Key]
    public int Id { get; set; }
    public int roomNumber { get; set; }

    public int houseId { get; set; }
    [ForeignKey("houseId")]
    public virtual House house { get; set; }

    public int itemId { get; set; }
    [ForeignKey("itemId")]
    public virtual Item item { get; set; }
}

public class Item
{
    [Key]
    public int Id { get; set; }
    public string name { get; set; }
}

我仍然遇到同样的错误。

【问题讨论】:

  • Room对象中需要多少个ID,ItemId和属性为Id的Item。
  • ItemId 是 Item 对象,Id 是整个 Room 对象的主键。

标签: c# foreign-keys asp.net-mvc-5 virtual dbset


【解决方案1】:

我想通了。我需要在上下文类中禁用级联删除。

代码如下:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<House>()
        .HasRequired(c => c.item)
        .WithMany()
        .WillCascadeOnDelete(false);

    modelBuilder.Entity<Room>()
        .HasRequired(s => s.item)
        .WithMany()
        .WillCascadeOnDelete(false);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多