使用 entity framework 的一对一关系

One to one relation using entity framework

我正在做一个小组项目,其中 Entity framework 中的一对一关系是这样定义的

builder.Entity<ApprovedAppointment>()
            .HasOne(aa => aa.Appointment)
            .WithOne(a => a.ApprovedAppointment)
            .HasForeignKey<ApprovedAppointment>(a => a.ApprovedAppointmentId);

使用流利 api。在数据库中,约会主键与 approvedAppointment 主键相同。例如,如果 appointmentId 5 是第一个被接受的约会,那么 approvedAppointmentId 也是 5,即使还没有插入其他 approvedAppointments。这是正常行为吗?有谁知道为什么会这样?

是的,这是默认映射行为,因为您将 FK 指向 table 的 PK。您可以在该配置中完全删除 .HasForeignKey()

HasForeignkey() 在 EF Core 中可用,允许您在任一 table 中指定配置的一对一关系键以指向另一个的 PK。

例如,您可以在您的 ApprovedAppointment table 中放置一个“AppointmentId”,或者在您的 Appointment table 中放置一个“ApprovedAppointmentId”,然后相应地映射 ForeignKey:

.HasForeignKey<ApprovedAppointment>(aa => aa.AppointmentId);

.HasForeignKey<Appointment>(a => a.ApprovedAppointmentId);

分别

这将允许约会的 AppointmentId 为 5,而 ApprovedAppointment 的 ApprovedAppointmentId 为 1 或 2,但包含 AppointmentId FK 为 5 以引用回约会。

通常在一对一的关系中,两个 table 将共享相同的 PK 以确保关系是一对一的。使用指定的备用 FK,您将映射 EF 将强制执行为一对一的一对多或多对一关系。我不确定 EF Code First 是否会在 FK 列上设置唯一约束,但如果不是,您应该添加一个以在数据级别强制执行它。