C# 实体框架代码优先:一对多循环引用
我使用的是EF6.1,启用了代码优先和自动迁移。到目前为止,我的模型(仅相关属性)如下所示:C# 实体框架代码优先:一对多循环引用,c#,entity-framework,database-design,code-first,cyclic-reference,C#,Entity Framework,Database Design,Code First,Cyclic Reference,我使用的是EF6.1,启用了代码优先和自动迁移。到目前为止,我的模型(仅相关属性)如下所示: public class Inventory : IEntity { public virtual ICollection<Room> Rooms { get; set; } public virtual ICollection<Item> Items { get; set; } } public class Item : IEntity { publi
public class Inventory : IEntity {
public virtual ICollection<Room> Rooms { get; set; }
public virtual ICollection<Item> Items { get; set; }
}
public class Item : IEntity {
public int RoomId { get; set; }
public int InventoryId { get; set; }
[ForeignKey("RoomId")]
public Room Room { get; set; }
[ForeignKey("InventoryId")]
public Inventory Inventory { get; set; }
}
public class Room : IEntity {
public ICollection<Item> Items { get; set; }
public int InventoryId { get; set; }
[ForeignKey("InventoryId")]
public Inventory Inventory { get; set; }
}
公共类目录:IEntity{
公共虚拟ICollection房间{get;set;}
公共虚拟ICollection项{get;set;}
}
公共类项目:通用性{
public int RoomId{get;set;}
public int InventoryId{get;set;}
[外宾(“室友”)]
公共房间{get;set;}
[外键(“目录ID”)]
公共资源清册{get;set;}
}
公共教室:教室{
公共ICollection项{get;set;}
public int InventoryId{get;set;}
[外键(“目录ID”)]
公共资源清册{get;set;}
}
在我的DbContext中,我通过以下方式创建引用:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Room>()
.HasRequired<Inventory>(room => room.Inventory)
.WithMany(inv => inv.Rooms)
.HasForeignKey(room => room.InventoryId);
modelBuilder.Entity<Item>()
.HasRequired<Room>(item => item.Room)
.WithMany(room => room.Items)
.HasForeignKey(item => item.RoomId);
modelBuilder.Entity<Item>()
.HasRequired<Inventory>(item => item.Inventory)
.WithMany(inv => inv.Items)
.HasForeignKey(item => item.InventoryId);
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()
.has必需(房间=>room.Inventory)
.有许多(库存=>库存房间)
.HasForeignKey(room=>room.InventoryId);
modelBuilder.Entity()
.has必需(项=>项.Room)
.WithMany(房间=>room.Items)
.HasForeignKey(item=>item.RoomId);
modelBuilder.Entity()
.HasRequired(项=>项.库存)
.带有多个(库存=>库存项目)
.HasForeignKey(item=>item.InventoryId);
}
就建模而言,我期望的是:
- 1个房间
- 1个房间n个项目
- 1.库存物品
有什么提示吗?您可能有两个项目实体的项目具有不同的要求。
可能与此有关,并且您确定错误与图形有关,而不是与代码中的其他地方有关。我的模型曾经工作过,我唯一更改的是添加房间实体。我看到有某种循环,但库存总是在每个参考的一侧。就我所想,应该有一个从库存->房间->物品的分级参考来进行过滤。另外,我能看到的唯一一件事是可能存在不一致(Item.Room.Inventory!=Item.Inventory),但这不应该是模型创建的设计问题,对吗?我不知道,我不是一个真正的程序员(仍在学习),但有一件事我确实知道,那就是,如果有可能,那就是它,那么可能就是它