2016-06-29 2 views
0

У меня есть класс, который может выглядеть следующим образом:Fluent API - как составить карту таблицы отношений?

public class Group 
{ 
    public int Id {get; set;} 
    public ICollection<Group> IsMemberOf {get; set;} 
} 

Группа может быть членом других групп. Id db У меня есть таблица Group и table GroupGroup. В ModelBuilder я использую этот код для определения соответствия.

modelBuilder.Entity<GroupGroup>() 
      .ToTable("GroupGroup") 
      .HasKey(e => new { e.GroupId, e.MemberGroupId }); 
modelBuilder.Entity<Group>() 
      .ToTable("Group") 
      .Ignore(e => e.IsMemberOf); 

Ну, мой вопрос заключается в том, чтобы отобразить группы из соотношения таблицы GroupGroup на собственность IsMemberOf с Fluent API? Я очень новичок в ef, Fluent API и тому подобное, и я знаю, что я должен позволить ef создать свою собственную таблицу отношений, но я должен использовать этот путь из-за подключения к AD и другим системам. Есть ли способ достичь этого?

Большое спасибо за любой намек.

ответ

0

Похоже, вам нужна ассоциация «многие-ко-многим» из-за этого таблицы ассоциации GroupGroup. Один из способов отобразить это:

modelBuilder.Entity<Group>() 
    .HasMany(g => g.IsMemberOf) 
    .WithMany() 
    .Map(m => m.MapLeftKey("ChildGroupId") 
       .MapRightKey("GroupId") 
       .ToTable("GroupGroup") 
     ); 

Это означает, что вы не имеете класс GroupGroup сущностей в модели класса. EF заполнит IsMemberOf коллекцию путем создания всех необходимых включается, если при выполнении инструкции LINQ, как:

var groups = context.Groups.Include(g => g.IsMemberOf).ToList(); 

Я не знаю, почему у вас есть эта линия .Ignore(e => e.IsMemberOf) в вашем отображении, но это должно быть удалено.

Вы можете даже сделать отображение в обоих направлениях:

public class Group 
{ 
    public int Id {get; set;} 
    public ICollection<Group> IsMemberOf { get; set; } 
    public ICollection<Group> HasMembers { get; set; } 
} 

и отображение:

modelBuilder.Entity<Group>() 
    .HasMany(g => g.IsMemberOf) 
    .WithMany(g => g.HasMembers) 
    .Map(m => m.MapLeftKey("ChildGroupId") 
       .MapRightKey("GroupId") 
       .ToTable("GroupGroup") 
     ); 
Смежные вопросы