首页 >后端开发 >C++ >如何首先使用EF代码创建具有多对多关系中其他属性的自定义加入表?

如何首先使用EF代码创建具有多对多关系中其他属性的自定义加入表?

Patricia Arquette
Patricia Arquette原创
2025-01-31 10:41:09481浏览

How Can I Create a Custom Join Table with Additional Properties in a Many-to-Many Relationship using EF Code First?

在多对多关系中使用自定义联接表

在使用EF Code First时,无法使用自定义联接表建立多对多关系。EF内部管理联接表,并将其隐藏在模型之外。

替代方法:一对多关系

要创建具有附加属性的自定义联接表,可以使用两种一对多关系的不同方法:

<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 virtual Member Member { get; set; }
    public virtual Comment Comment { get; set; }

    public int Something { get; set; }
    public string SomethingElse { get; set; }
}</code>

这在Member和MemberComment以及Comment和MemberComment之间创建了两个独立的一对多关系。联接表由MemberComment类表示。

这种方法的优势

这种方法具有以下优点:

  • 允许在联接表上定义附加属性(例如Something和SomethingElse)。
  • 提供更灵活的查询和按联接表属性过滤的功能。
  • 通过约定保留级联删除行为。

示例查询

使用此模型,您可以执行各种查询,例如:

  • 查找具有特定姓氏的成员的所有评论:
<code class="language-csharp">var commentsOfMembers = context.Members
    .Where(m => m.LastName == "Smith")
    .SelectMany(m => m.MemberComments.Select(mc => mc.Comment))
    .ToList();</code>
  • 查找具有特定名称的成员及其评论:
<code class="language-csharp">var membersWithComments = context.Members
    .Where(m => m.LastName == "Smith")
    .Select(m => new
    {
        Member = m,
        Comments = m.MemberComments.Select(mc => mc.Comment)
    })
    .ToList();</code>
  • 通过联接表中的属性过滤成员的评论:
<code class="language-csharp">var filteredCommentsOfMember = context.MemberComments
    .Where(mc => mc.MemberId == 1 && mc.Something == 99)
    .Select(mc => mc.Comment)
    .ToList();</code>

以上是如何首先使用EF代码创建具有多对多关系中其他属性的自定义加入表?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn