实体框架6中的一对多和一对多关系

时间:2015-04-02 17:52:54

标签: c# entity-framework entity-framework-6 one-to-many

现在我一直在努力做这项工作。

我有三个实体:

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,必需,一切。我只是不知道如何“映射”它。

有人可以帮忙吗?

编辑:我希望ListItem是一个弱实体,因此它的PK和FK应该是ListId和ItemId。

1 个答案:

答案 0 :(得分:1)

这实际上是一个多对多关系,你试图明确地映射junction table,所以,在ListItem类中你需要添加这两个Ids属性:

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