![](/img/trans.png)
[英]Entity Framework Fluent API map DbSet<> value to custom object in table
[英]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.