EF Core 一对一或零关系
EF Core One to One or Zero Relationship
我有个人和地址。地址是可选的。
请看下面的代码
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);
});
我应该如何更改映射以使地址可选?
这里
.HasForeignKey<Person>(a => a.PersonId)
你告诉 EF Person.PersonId
将是 Address
的 FK(外键),即 Person
是依赖的并且正在引用主体 Address
。
应该反过来:
.HasForeignKey<Address>(a => a.PersonId)
这样,Person
(委托人)将有 0..1 Address
,Address
(受抚养人)将有 1 Person
(因为PersonId
既是PK又是FK)。
这称为共享主键关联,是建模一对零或一对关系的标准(和默认)方式EF 核心。
有关详细信息,请参阅 Relationships。
我有个人和地址。地址是可选的。 请看下面的代码
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);
});
我应该如何更改映射以使地址可选?
这里
.HasForeignKey<Person>(a => a.PersonId)
你告诉 EF Person.PersonId
将是 Address
的 FK(外键),即 Person
是依赖的并且正在引用主体 Address
。
应该反过来:
.HasForeignKey<Address>(a => a.PersonId)
这样,Person
(委托人)将有 0..1 Address
,Address
(受抚养人)将有 1 Person
(因为PersonId
既是PK又是FK)。
这称为共享主键关联,是建模一对零或一对关系的标准(和默认)方式EF 核心。
有关详细信息,请参阅 Relationships。