2016-06-29 19 views
0

我有類可能是這樣的:Fluent API - 如何映射自定義關係表?

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

組可以是其他組的成員。 Id db我有表組和表GroupGroup。在模型構建器中,我使用此代碼來定義映射。

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") 
     ); 
相關問題