繁体   English   中英

EF6外键约束简单模型

[英]EF6 foreign key constraint in simple model

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

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控制器中加载Index操作结果时,出现此错误:

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; }
}

我仍然遇到相同的错误。

我已经知道了。 我需要在上下文类中禁用级联删除。

这是代码:

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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM