[英]EF Core 3: reverse foreign key relation
考慮這些 model 關系:
public class A
{
[Key]
public int Id { get; set; }
public int BId { get; set; }
public ICollection<B> Bs { get; set; }
}
public class D
{
[Key]
public int Id { get; set; }
public int BId { get; set; }
public ICollection<B> Bs { get; set; }
}
public class B
{
public int Id { get; set; }
public int CId { get; set; }
public C C { get; set; }
}
public class C
{
[Key]
public int Id { get; set; }
}
使用此配置:
modelBuilder.Entity<B>()
.HasKey(x => new { x.Id, x.CId });
modelBuilder.Entity<A>()
.HasMany(a => a.Bs)
.WithOne()
.HasForeignKey(b => b.Id)
.HasPrincipalKey(a => a.Id);
modelBuilder.Entity<D>()
.HasMany(a => a.Bs)
.WithOne()
.HasForeignKey(b => b.Id)
.HasPrincipalKey(a => a.Id);
目的是在A
和D
之間重用B
,但是 EF Core 在B
的表上創建外鍵約束,這意味着我不能擁有與A
關聯但不與B
關聯的條目。
有沒有辦法定義約束,使其存在於A
和D
上?
這是一個數據庫建模問題(不是 EF 核心),我們需要更多現實生活中的信息才能真正提供幫助。
盡管如此,外鍵已從您的代碼正確放置在A
和D
上。 那么問題來了:哪個表是子表? 在這里查看更廣泛的答案: Where should I store a foreign key?
將 FK 放在錯誤的一邊,會危及數據的完整性。
您可以創建的唯一其他關系是 B 表上的兩個鍵,這意味着為了創建B
值,您需要同時A
和D
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.