簡體   English   中英

Ef Core 一對多與連接表

[英]Ef Core One-To-Many with join table

我有兩個模型,它們都有相同的第三個 model 的集合。 Ef Core 5 現在為集合 model 上的兩個模型創建一個外鍵,但是有沒有辦法讓它為每個關系生成一個連接表,而無需明確地為連接表創建一個 model?

我的模型:

public class Model1 {
    // ...
    public List<Model3> collection;
}

public class Model2 {
    // ...
    public List<Model3> collection;
}

public class Model3 {
    // ...
}

我希望數據庫看起來像這樣:

表:型號1

表:模型2

表:模型3

表:Model3Model1(JoinTable)

  • 型號3Id
  • 型號1Id

表:Model3Model2(JoinTable)

  • 型號3Id
  • 型號2Id

但我不想要那些連接表的顯式類型。 我知道 EFCore 能夠為多對多關系推斷這些連接表,所以我想知道是否也有一種方法可以為一對多執行此操作。

我不認為這是可能的。 最好的折衷方案是 Model3 中的私有屬性,例如:

public class MyContext : DbContext
{
    public DbSet<Model1> Model1 { get; set; }
    public DbSet<Model2> Model2 { get; set; }
    public DbSet<Model3> Model3 { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Model3>()
            .HasMany<Model1>("Collection1")
            .WithMany(m1 => m1.Collection)
            .UsingEntity(j => {
                j.ToTable("Model3Model1");
                j.Property("Collection1Id").HasColumnName("Model3Id");
                j.Property("CollectionId").HasColumnName("Model1Id");
            });
        modelBuilder.Entity<Model3>()
            .HasMany<Model2>("Collection2")
            .WithMany(m2 => m2.Collection)
            .UsingEntity(j => {
                j.ToTable("Model3Model2");
                j.Property("Collection2Id").HasColumnName("Model3Id");
                j.Property("CollectionId").HasColumnName("Model2Id");
            });
    }
}

public class Model1
{
    public int Id { get; set; }
    public List<Model3> Collection { get; set; }
}

public class Model2
{
    public int Id { get; set; }
    public List<Model3> Collection { get; set; }
}

public class Model3
{
    public int Id { get; set; }
    private List<Model1> Collection1 { get; set; }
    private List<Model2> Collection2 { get; set; }
}

生成的連接實體有一個導航屬性,其中名稱為 +“Id”。 棘手的部分是設置所需的列名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM