我正在做一個小組專案,其中物體框架中的一對一關系是這樣定義的
builder.Entity<ApprovedAppointment>()
.HasOne(aa => aa.Appointment)
.WithOne(a => a.ApprovedAppointment)
.HasForeignKey<ApprovedAppointment>(a => a.ApprovedAppointmentId);
使用流暢的api。在資料庫中,約會主鍵與approvedAppointment 主鍵相同。例如,如果appointmentId 5 是第一個被接受的約會,那么approvedAppointmentId 也是5,即使還沒有插入其他approvedAppointments。這是正常行為嗎?有誰知道為什么它會這樣作業?
uj5u.com熱心網友回復:
是的,這是默認的映射行為,因為您將 FK 指向表的 PK。您可以.HasForeignKey()在該配置中完全洗掉。
該HasForeignkey()是EF提供的核心,讓您可以在其他的PK提名無論是在表以點的配置一個一對一關系的關鍵。
例如,您可以在 ApprovedAppointment 表中放置一個“AppointmentId”,或者在您的約會表中放置一個“ApprovedAppointmentId”,然后相應地映射 ForeignKey:
.HasForeignKey<ApprovedAppointment>(aa => aa.AppointmentId);
或者
.HasForeignKey<Appointment>(a => a.ApprovedAppointmentId);
分別。
這將允許 Appointment 的 AppointmentId 為 5,而 ApprovedAppointment 的 ApprovedAppointmentId 為 1 或 2,但包含一個 AppointmentId FK 為 5 以參考回約會。
通常在 1 對 1 關系中,兩個表將共享相同的 PK 以確保關系是 1 對 1。指定備用 FK 后,您將映射 EF 將強制執行為 1 對 1 的 1 對多或多對 1 關系。我不確定 EF Code First 是否會在 FK 列上設定唯一約束,但如果沒有,您應該添加一個以在資料級別強制執行它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/335916.html
