【发布时间】:2020-03-11 19:18:16
【问题描述】:
我收到多级联路径错误。
我的模型是 0..1 到 0..1 或者至少这是我想要达到的目标。
我的模型如下所示:
public class House
{
public Guid Id { get; set; }
[ForeignKey("User")]
public User Tenant { get; set; }
public class User
{
public House Home { get; set; }
public Guid Id { get; set; }
我也有这个:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<House>()
.HasOne(p => p.Tenant)
.WithOne(t => t.Home)
.OnDelete(DeleteBehavior.Restrict);
}
错误不是我在删除对象时出错,它根本不会创建数据库。
我已经被告知这里已经解决了:
Entity Framework Core cascade delete one to many relationship
但是我不敢说它似乎并没有真正解决我的问题,或者我不明白它是如何解决它的。
任何帮助将不胜感激。
//更新
只是为了澄清。有许多用户/租户和许多房屋/家庭。 每个租户都可以拥有一所房子,但并非总是如此。 每个房屋都可以有一个租户,但并不总是有一个。
【问题讨论】:
-
可以添加表的架构吗?
-
这似乎有点奇怪......你为什么使用 ".WithOne(t=> t.Home)" ? Home 是 House 的一个实例,不是吗?所以看起来你在做一种循环引用。
-
@大卫。我承认我可能没有正确使用它。我最初根本没有 OnModelCreating。但得到级联错误。所以在查看了其他一些类似的问题之后,我得出结论我需要添加删除行为。这样当房屋或租户被删除时,记录可以设置为空。
-
应该有其他原因(此处未显示)导致问题。或者生成的迁移是陈旧的。将有问题的 2 个类 + 完全 流畅的配置放在一个干净的新控制台项目中并生成迁移 - 不应该有级联删除约束。
-
如果可能(我假设你正在构建你的数据库方案)我会使用更标准的 EF 系统税:每个实体中的每个 PK 都应该命名为“Id”,然后当你想引用一个“父表”(例如:House 实体有一个“User”作为租户,您只需将其(在 House 实体内)命名为“UserId”。EF 会自动理解 UserId 是指用户实体的列 ID . 这可以在没有任何 OnModelCreating 语法的情况下完成。开始简单!