【发布时间】:2020-03-21 07:09:50
【问题描述】:
只是有点担心如何为与同一实体的一对一关系配置 EF,这对我来说很少见。我遇到了这个要求,我对如何建模有点怀疑。
这是场景,
一位患者可以有一个伴侣,而一位伴侣只能属于一位患者。伴侣也是患者。
我的模型是这样的;
public class Patient
{
public long Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public EGender Gender { get; set; }
public DateTime DateOfBirth { get; set; }
public DateTime CreatedAt { get; set; }
public long PartnerId { get; set; }
public Patient Partner { get; set; }
public EPatientType PatientType { get; set; }
}
我的 FluentAPI 配置是这样的,但不确定我做对了
builder.HasOne(p => p.Partner)
.WithOne(p => p.Partner) // Not sure what to do here
.IsRequired(false)
.HasForeignKey<Patient>(p => p.PartnerId)
.OnDelete(DeleteBehavior.Restrict);
感谢任何关于如何在 fluentAPI 上建模或如何进行的想法...
【问题讨论】:
-
只要
OwnsOne没有参数就足够了。这是Ef核心还是完整版? -
这是 EF Core。
-
@Mat ...你是说我会做 builder.OwnsOne(x =>x.Partner) ??
-
抱歉,我的意思是,
builder.OwnsOne(p => p.Partner).HasOne()可能会起作用。当我们没有一端的导航属性时,我们只是配置它而不指定属性。但不确定一对一是否适用于同一张桌子,因为一对一意味着孩子也将具有与父母相同的 id。不知道它在 Ef 核心中的表现如何。 -
@Mat ...我认为 HasOne() 也需要一个参数...这不能为空。但同样,这归结为我来自哪里......即如何正确建模。
标签: c# entity-framework ef-fluent-api