如何解决EF核心3:反向外键关系
考虑以下模型关系:
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);
目的是在B
和A
之间重用D
,但是EF Core为B
在表上创建了外键约束,这意味着我不能具有与A
关联而又不与B
关联的条目。
是否有一种方法来定义约束,以使约束存在于A
和D
上?
解决方法
这是一个数据库建模问题(不是EF核心),我们需要更多现实生活中的信息才能真正提供帮助。
尽管如此,外键已正确地从代码中放置在A
和D
上。所以问题是:子表是哪个表?在此处查看更广泛的答案:Where should I store a foreign key?
将FK放在错误的一侧,会危害数据的完整性。
您可以创建的唯一其他关系是B表上的两个键,这意味着要创建B
值,既需要A
也需要D
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。