0

我有这个场景:

public class Table1
{
    [Key]
    public string Table1Code { get; set; }

    public virtual List<Table2> Table2 { get; set; }
}

public class Table2
{
    [Key]
    public string Table2Code { get; set; }

    public virtual List<Table1> Table1 { get; set; }    
}

然后我创建一个配置类来指定多对多表:

public class Table1Configuration : EntityTypeConfiguration<Table1>
{
    public Table1Configuration()
    {
        HasMany(g => g.Table2)
            .WithMany(r => r.Table1)
            .Map(c =>
            {
                c.ToTable("Table1_Table2");
                c.MapLeftKey("Table1Code");
                c.MapRightKey("Table2Code");
            });
    }
}

现在我必须创建一个Table3这样的

public class Table3
{
    [Key]
    public string Table3Code { get; set; }

    public string Table1Code { get; set; }
    public string Table2Code { get; set; }
}

如何为列Table1CodeTable2Code表添加外键Table1_Table2

我不需要将外键添加到Table1and Table2but 到 table Table1_Table2

4

2 回答 2

1

如果没有明确的 Table1_Table2 类,不确定是否可以做到这一点:

public class Table1_Table2
{
    public string Table1Code { get; set; }  // PK 1
    public string Table2Code { get; set; }  // PK 2
    public virtual Table3 Table3 { get; set; }    
}

然后:

public class Table3
{
    // Not needed in 1:1
    // [Key]
    // public string Table3Code { get; set; }
    public string Table1Code { get; set; }
    public string Table2Code { get; set; }
    // Make this a collection for 1:M
    public virtual Table1_Table2 Table1_Table2 { get; set; }    
}

流畅的代码:

modelBuilder.Entity<Table3>()
    .HasKey(t3 => new { t3.Table1Code, t3.Table2Code });

modelBuilder.Entity<Table1_Table2>()
    .HasOptional(t => t.Table3)
    .WithRequired(t3 => t3.Table1_Table2);
于 2017-09-20T19:14:25.563 回答
0

像您已经使用 EF 建立的 Many2Many(M2M) 关系会创建一个表,该表具有与 M2M 关系中的实体的表的前键。

因此,按照您在类中所做的操作,Table1第三Table2个映射表将由 EF 本身创建。所以没有特别需要创建第三张表Table3

但是,如果出于领域原因,您想创建第三个映射实体Table2,您将不得不以下列方式修改类。Table1Table2

public class Table1
{
    [Key]
    public string Table1Code { get; set; }

    public virtual List<Table3> Table3 { get; set; }
}

public class Table2
{
    [Key]
    public string Table2Code { get; set; }

    public virtual List<Table3> Table3 { get; set; }    
}

 public class Table3
{
    [Key]
    public string Table3Code { get; set; }

    public Table1 Table1 { get; set; }
    public string Table1Code { get; set; }

    public Table2 Table2 { get; set; }
    public string Table2Code { get; set; }
}
于 2017-09-20T10:28:56.330 回答