我正在使用EF 6.1,首先启用代码并启用自动迁移。到目前为止,我的模型(仅限相关属性)如下所示:
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; }
}
在我的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);
}
在建模方面,我期望得到的是:
因此,我希望能够通过库存直接或按房间过滤项目。运行应用程序并首次访问DbContext时,抛出SqlCeException,告诉我有循环引用。现在,由于库存在所有情况下都是主实体,并且只有另一个细节步骤(房间) - 可以跳过进行过滤 - 我在图表中看不到任何循环。
任何提示?
答案 0 :(得分:0)
您是否有可能拥有两个具有不同要求的项目实体项目。 mayb与它有关,你确定错误与你的图形有关,而不是代码中的其他地方。