簡體   English   中英

Fluent API-如何映射自定義關系表?

[英]Fluent API - how to map custom relation table?

我有可能看起來像這樣的課:

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

組可以是其他組的成員。 id db我有表Group和表GroupGroup。 在ModelBuilder中,我使用此代碼定義映射。

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

好吧,我的問題是如何使用Fluent API將組從關系表GroupGroup映射到屬性IsMemberOf? 我對ef,Fluent API等非常陌生,我知道我應該讓ef創建自己的關系表,但是由於要連接到AD和其他系統,因此必須使用這種方式。 有什么辦法可以做到這一點?

非常感謝您的任何提示。

由於此GroupGroup關聯表,您似乎需要GroupGroup關聯。 一種映射方式是:

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

這意味着您的類模型中沒有GroupGroup實體類。 如果執行類似LINQ的語句,EF會通過設置所有必要的聯接來填充IsMemberOf集合:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM