[英]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)
表:Model3Model2(JoinTable)
但我不想要那些連接表的顯式類型。 我知道 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.