【问题标题】:EF Core 3: reverse foreign key relationEF Core 3:反向外键关系
【发布时间】:2020-12-10 14:04:34
【问题描述】:

考虑这些模型关系:

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 创建了外键约束,这意味着我不能拥有与@987654327 关联的条目@ 也没有与B 关联。

有没有办法定义约束,使其存在于AD 上?

【问题讨论】:

    标签: c# .net-core entity-framework-core ef-code-first ef-core-3.1


    【解决方案1】:

    这是一个数据库建模问题(不是 EF 核心),我们需要更多现实生活中的信息才能真正提供帮助。

    尽管如此,外键已从您的代码中正确放置在 AD 上。那么问题来了:哪个表是子表?在这里查看更广泛的答案:Where should I store a foreign key?

    将 FK 放在错误的一侧,会危及数据的完整性。

    您可以创建的唯一其他关系是 B 表上的两个键,这意味着要创建 B 值,您需要 AD

    【讨论】:

    • 谢谢,这很好。我想我必须考虑这里的结构。我可能只是使用松散耦合的表并自己处理连接:)
    猜你喜欢
    • 1970-01-01
    • 2020-10-03
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多