在EF Core Code First中實現具有額外字段的多對多關係
簡介:
Entity Framework Core (EF Core) 允許在實體之間創建多對多關係。但是,EF Core 不直接支持自定義管理這些關係的連接表。本文探討了一種使用 Code First 在關聯表中創建具有附加字段的多對多關係的替代方法。
創建關聯:
我們將創建兩個一對多關係,而不是直接的多對多關係。例如,考慮以下場景:
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; } }
在此場景中,Member 和 Comment 實體具有多對多關係,而 MemberComment 代表具有附加字段的關聯表。
查詢:
要查詢具有附加字段的關聯,可以使用稱為“投影”的技術:
// 查找 LastName = "Smith" 的成员的所有评论 var commentsOfMembers = context.Members .Where(m => m.LastName == "Smith") .SelectMany(m => m.MemberComments.Select(mc => mc.Comment)) .ToList();
操作:
在此模型中添加實體和關係類似於其他 Code First 模型:
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();
結論:
雖然 EF Core 不直接支持在關聯表中具有附加字段的多對多關係,但可以使用兩個一對多關係來創建類似的功能。這種方法允許創建具有附加信息的豐富關聯,從而實現更靈活的數據建模和查詢功能。
以上是如何首先與EF核心代碼中的額外字段實現多一關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!