簡體   English   中英

EF Core 3:反向外鍵關系

[英]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);

目的是在AD之間重用B ,但是 EF Core 在B的表上創建外鍵約束,這意味着我不能擁有與A關聯但不與B關聯的條目。

有沒有辦法定義約束,使其存在於AD上?

這是一個數據庫建模問題(不是 EF 核心),我們需要更多現實生活中的信息才能真正提供幫助。

盡管如此,外鍵已從您的代碼正確放置在AD上。 那么問題來了:哪個表是子表? 在這里查看更廣泛的答案: Where should I store a foreign key?

將 FK 放在錯誤的一邊,會危及數據的完整性。

您可以創建的唯一其他關系是 B 表上的兩個鍵,這意味着為了創建B值,您需要同時AD

暫無
暫無

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

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