【问题标题】:Several identical many-to-many relationships with attributes with one entity class for each of the linking tables几个相同的多对多关系,每个链接表都有一个实体类的属性
【发布时间】:2014-08-11 01:39:33
【问题描述】:

我有一个Email 实体,其中包含ToCcBcc 集合Contact 实体。这些关系是多对多的,我需要订购ToCcBcc 中的电子邮件。所以我必须在两者之间引入第三个实体 - EmailContactAssignment 和一个额外的 SortOrder 属性。

现在因为我在这里有 3 个不同的多对多关系,所以我需要其中的 3 个关系表。

目前我看到的唯一解决方案是拥有 3 个关系实体类:EmailToContactAssignmentEmailCcContactAssignment1EmailBccContactAssignmnet。 似乎我不能有一个具有导航属性的基类和 3 个中的每一个的空子类。我需要在每个子类中复制相同的导航属性。

对于ToCcBcc 关系,是否仍可以使用一个实体但与该实体有3 个单独的多对多关系?

【问题讨论】:

    标签: entity-framework ef-code-first entity-framework-6


    【解决方案1】:

    是否仍然可以使用一个实体,但与该实体有 3 个独立的多对多关系,用于 To、Cc 和 Bcc 关系?

    如果它们映射到单独的表,那么不,这是不可能的。

    似乎我不能有一个具有导航属性的基类和 3 个中的每一个的空子类。我需要在每个子类中复制相同的导航属性。

    您可以为通用属性定义一个接口,这样您至少可以使用一致的合同。

    public interface IContactAssignment
    {
        int SortOrder { get; set; }
        ICollection<Contact> Contacts { get; set; }
    }
    
    public class EmailToContactAssignment : IContactAssignment
    {
        // ...
    }
    
    public class EmailCcContactAssignment : IContactAssignment
    {
        // ...
    }
    
    public class EmailBccContactAssignment : IContactAssignment
    {
        // ...
    }
    

    在你的 DbContext 中:

    protected override OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<EmailToContactAssignment>()
            .ToTable("EmailToContactAssignmentXref");
    
        modelBuilder.Entity<EmailCcContactAssignment>()
            .ToTable("EmailCcContactAssignmentXref");
    
        modelBuilder.Entity<EmailBccContactAssignment>()
            .ToTable("EmailBccContactAssignmentXref");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-12
      • 2016-07-23
      相关资源
      最近更新 更多