Entity Framework 6 中的一对多和一对多关系
One-To-Many and One-To-Many relationship in Entity Framework 6
现在我已经尝试了太久才完成这项工作。
我有三个实体:
public class Item
{
public int ItemId { get; set; }
public string ItemName { get; set; }
public int StdVolume { get; set; }
public string StdUnit { get; set; }
public ICollection<ListItem> ListItems { get; set; }
}
public class ListItem
{
public int Amount { get; set; }
public int Volume { get; set; }
public string Unit { get; set; }
public List List { get; set; }
public Item Item { get; set; }
}
public class List
{
public int ListId { get; set; }
public string ListName { get; set; }
public ICollection<ListItem> ListItems { get; set; }
}
如您所见,我在 Item 和 ListItem 之间有一对多,在 Item 和 ListItem 之间有一对多。
我觉得我已经尝试了一切:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
HasKey,必需,一切。我只是不知道如何 "map" 它。
有人能帮忙吗?
编辑:我希望 ListItem 是一个弱实体,因此它的 PK 和 FK 应该是 ListId 和 ItemId。
这实际上是一个多对多关系,而您正试图显式映射 junction table,因此,在 ListItem
class 中您需要添加这两个 ID属性:
public class ListItem
{
public int ListId { get; set; }
public int ItemId { get; set; }
//...
}
两个关系的配置是这样的:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ListItem>().HasKey(li => new {li.ListId, li.ItemId});
modelBuilder.Entity<ListItem>()
.HasRequired(li => li.List)
.WithMany(l => l.ListItems)
.HasForeignKey(li => li.ListId);
modelBuilder.Entity<ListItem>()
.HasRequired(li => li.Item)
.WithMany(l => l.ListItems)
.HasForeignKey(li => li.ItemId);
}
现在我已经尝试了太久才完成这项工作。
我有三个实体:
public class Item
{
public int ItemId { get; set; }
public string ItemName { get; set; }
public int StdVolume { get; set; }
public string StdUnit { get; set; }
public ICollection<ListItem> ListItems { get; set; }
}
public class ListItem
{
public int Amount { get; set; }
public int Volume { get; set; }
public string Unit { get; set; }
public List List { get; set; }
public Item Item { get; set; }
}
public class List
{
public int ListId { get; set; }
public string ListName { get; set; }
public ICollection<ListItem> ListItems { get; set; }
}
如您所见,我在 Item 和 ListItem 之间有一对多,在 Item 和 ListItem 之间有一对多。
我觉得我已经尝试了一切:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
HasKey,必需,一切。我只是不知道如何 "map" 它。
有人能帮忙吗?
编辑:我希望 ListItem 是一个弱实体,因此它的 PK 和 FK 应该是 ListId 和 ItemId。
这实际上是一个多对多关系,而您正试图显式映射 junction table,因此,在 ListItem
class 中您需要添加这两个 ID属性:
public class ListItem
{
public int ListId { get; set; }
public int ItemId { get; set; }
//...
}
两个关系的配置是这样的:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ListItem>().HasKey(li => new {li.ListId, li.ItemId});
modelBuilder.Entity<ListItem>()
.HasRequired(li => li.List)
.WithMany(l => l.ListItems)
.HasForeignKey(li => li.ListId);
modelBuilder.Entity<ListItem>()
.HasRequired(li => li.Item)
.WithMany(l => l.ListItems)
.HasForeignKey(li => li.ItemId);
}