26

我有人员和地址。地址是可选的。请看下面的代码

class Person
{
    [Key]
    public int PersonID { get; set; }
    public string Name { get; set; }

    public Address Address { get; set; }

}

class Address
{
    [Key, ForeignKey("Person")]
    public int PersonID { get; set; }

    public string City { get; set; }
}

注册码如下:

modelBuilder.Entity<Address>(entity =>
            {
                entity.HasKey(z => z.PersonID);
                entity.HasOne(p => p.Person)
                     .WithOne(a => a.Address)
                     .HasForeignKey<Person>(a => a.PersonId);
            });

我应该如何更改映射以使地址可选?

4

1 回答 1

49

这里

.HasForeignKey<Person>(a => a.PersonId)

您告诉 EF 这Person.PersonId将是 的 FK(外键)Address,即Person依赖并引用主体Address

它应该是其他方式:

.HasForeignKey<Address>(a => a.PersonId)

这样,Person(主体)将有 0..1 Address,而Address(从属)将有 1 Person(因为PersonIdPK 和 FK)。

这称为共享主键关联,是在 EF Core中建模一对零或一对关系的标准(和默认)方式。

有关详细信息,请参阅关系

于 2019-03-04T14:49:04.540 回答