如何映射自定义关系表
本文关键字:自定义 关系 映射 何映射 | 更新日期: 2023-09-27 17:53:20
我有一个类,看起来像这样:
public class Group
{
public int Id {get; set;}
public ICollection<Group> IsMemberOf {get; set;}
}
Group可以是其他组的成员。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);
好吧,我的问题是如何映射组从关系表GroupGroup到属性IsMemberOf与Fluent API?我是非常新的ef,流利的API等,我知道我应该让我们创建自己的关系表,但我必须使用这种方式,因为连接到AD和其他系统。有什么办法可以做到这一点吗?
谢谢你的提示
由于这个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")
);