在EF Core Code First中实现具有额外字段的多对多关系
简介:
Entity Framework Core (EF Core) 允许在实体之间创建多对多关系。但是,EF Core 不直接支持自定义管理这些关系的连接表。本文探讨了一种使用 Code First 在关联表中创建具有附加字段的多对多关系的替代方法。
创建关联:
我们将创建两个一对多关系,而不是直接的多对多关系。例如,考虑以下场景:
<code class="language-csharp">public class Member { public int MemberID { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public virtual ICollection<MemberComment> MemberComments { get; set; } } public class Comment { public int CommentID { get; set; } public string Message { get; set; } public virtual ICollection<MemberComment> MemberComments { get; set; } } public class MemberComment { [Key, Column(Order = 0)] public int MemberID { get; set; } [Key, Column(Order = 1)] public int CommentID { get; set; } public int Something { get; set; } public string SomethingElse { get; set; } public virtual Member Member { get; set; } public virtual Comment Comment { get; set; } }</code>
在此场景中,Member 和 Comment 实体具有多对多关系,而 MemberComment 代表具有附加字段的关联表。
查询:
要查询具有附加字段的关联,可以使用称为“投影”的技术:
<code class="language-csharp">// 查找 LastName = "Smith" 的成员的所有评论 var commentsOfMembers = context.Members .Where(m => m.LastName == "Smith") .SelectMany(m => m.MemberComments.Select(mc => mc.Comment)) .ToList();</code>
操作:
在此模型中添加实体和关系类似于其他 Code First 模型:
<code class="language-csharp">var member1 = new Member { FirstName = "Pete" }; var comment1 = new Comment { Message = "Good morning!" }; var memberComment1 = new MemberComment { Member = member1, Comment = comment1, Something = 101 }; context.MemberComments.Add(memberComment1); // 这也会添加 member1 和 comment1 context.SaveChanges();</code>
结论:
虽然 EF Core 不直接支持在关联表中具有附加字段的多对多关系,但可以使用两个一对多关系来创建类似的功能。这种方法允许创建具有附加信息的丰富关联,从而实现更灵活的数据建模和查询功能。
以上是如何首先与EF核心代码中的额外字段实现多一关系?的详细内容。更多信息请关注PHP中文网其他相关文章!