1

实体

Person
    INT Id
    Address Adresss

Address
    INT Id
    INT PersonId

模型生成器

modelBuilder.Entity<Person>()
    .HasOne(p => p.Address)
    .WithOne()
    .IsRequired(false)
    .OnDelete(DeleteBehavior.Cascade)
    .HasForeignKey<Adresss>(a => a.PersonId)
    .IsRequired();

当我这样做时

Person.Address = null

然后保存更改。我收到这个错误

实体类型“Person”和“Address”之间的关联已被切断,但该关系要么被标记为“必需”,要么由于外键不可为空而被隐式要求。

我认为错误告诉我使PersonId(外键)可选。所以像下面这样。这将导致 SQL Server 数据库中的外键列可以为空。我想要的是允许用户删除一个地址,但如果添加了一个地址,那么它必须包含一个 PersonId。所以我不希望它为空

Address
    INT Id
    INT? PersonId

可以让我在地址表中的 personId 不为空,而且还允许人员的地址属性是可选的吗?换句话说,一对一或一对零关系

4

1 回答 1

1

我认为 null Address 的最佳方法是:

Context.Address.Remove(Person.Address)

因为 Address 是一个 DbSet,而不仅仅是一个导航属性。您必须标记要删除的实体“地址”。

于 2021-04-25T11:27:30.943 回答