.net core EF核心一对一或零关系

.net core EF核心一对一或零关系,.net-core,entity-framework-core,ef-core-2.2,.net Core,Entity Framework Core,Ef Core 2.2,我有个人和地址。地址是可选的。 请参阅下面的代码 班级人员 { [关键] 公共int PersonID{get;set;} 公共字符串名称{get;set;} 公共广播地址{get;set;} } 班级地址 { [钥匙,外国钥匙(“人”)] 公共int PersonID{get;set;} 公共字符串City{get;set;} } 注册代码如下: modelBuilder.Entity(Entity=> { entity.HasKey(z=>z.PersonID); entity.HasOn

我有个人和地址。地址是可选的。 请参阅下面的代码

班级人员
{
[关键]
公共int PersonID{get;set;}
公共字符串名称{get;set;}
公共广播地址{get;set;}
}
班级地址
{
[钥匙,外国钥匙(“人”)]
公共int PersonID{get;set;}
公共字符串City{get;set;}
}
注册代码如下:

modelBuilder.Entity(Entity=>
{
entity.HasKey(z=>z.PersonID);
entity.HasOne(p=>p.Person)
.WithOne(a=>a.Address)
.HasForeignKey(a=>a.PersonId);
});
如何更改映射以使地址可选?

此处

.HasForeignKey<Person>(a => a.PersonId)
这样,
Person
(委托人)将有0..1
地址
地址
(受抚养人)将有1
Person
(因为
PersonId
既是PK又是FK)

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


有关更多信息,请参阅。

非常感谢!您能否澄清一下,此外,OP还需要在
类地址
上指定
公众人物{get;set;}
否则将无法具体指定
entity.HasOne(p=>p.Person)
@ttugates Nope,两个导航属性都不是必需的。如果
Address
没有
Person
导航属性,则流畅调用将是
entity.HasOne()
.HasForeignKey<Address>(a => a.PersonId)