2015-04-02 2 views
0

Теперь я слишком долго пытался выполнить эту работу.Отношение «один ко многим» и «один ко многим» в 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; } 
} 

Как вы можете видеть, у меня есть один-ко-многим между п и ListItem, и один-ко-многим между п и ListItem.

Я чувствую, что я попробовал все в:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 

HasKey, Обязательно, все. Я просто не знаю, как его «сопоставить».

Может ли кто-нибудь помочь?

EDIT: Я хочу, чтобы ListItem был слабым сущностью, поэтому его PK и FK должны быть ListId и ItemId.

+0

Что такое прецедент для этой модели? Я не понимаю структуру, в которой вы хотите как ListId, так и ItemId. Не могли бы вы объяснить данные образца? –

ответ

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); 
} 
Смежные вопросы