[英]Create optional-optional relationship in EF6 with PK instead of FK
是否可以根據表的 PK 創建一個自動填充我的導航屬性的映射? 這意味着我不想在任何桌子上都有 FK。 我知道當有 Optional -> Required 映射時這是可能的。 AFAIK 在 SQL 服務器上沒有創建任何約束,EF6 在運行時“模擬”了這種關系。
|====================| |====================|
| Car | | Driver |
|====================| |====================|
| Id | 0..1 ----- 0..1 | Id |
|--------------------| |--------------------|
所以代碼_dbContext.Cars.Include(x => x.Driver).First(x => x.Id == 1);
如果存在,將返回帶有驅動程序的汽車,如果不存在,則返回 null 驅動程序。
class Car
{
public int Id { get; set; }
public virtual Driver Driver { get; set; }
}
class Driver
{
public int Id { get; set; }
public virtual Car Car { get; set; }
}
以下映射想要在我的汽車中創建一個 DriverId:
class CarMapping : EntityTypeConfiguration<Car>
{
public CarMapping()
{
HasKey(x => x.Id);
}
}
class DriverMapping : EntityTypeConfiguration<Driver>
{
public CarMapping()
{
HasKey(x => x.Id);
HasOptional(x => x.Car)
.WithOptionalPrincipal(x => x.Driver);
}
}
我檢查了前面提到的required
映射:
class CarMapping : EntityTypeConfiguration<Car>
{
public CarMapping()
{
HasKey(x => x.Id);
}
}
class DriverMapping : EntityTypeConfiguration<Driver>
{
public CarMapping()
{
HasKey(x => x.Id);
HasOptional(x => x.Car)
.WithRequired(x => x.Driver);
}
}
它有效。 EF6 不對插入或刪除執行任何驗證...這是一個錯誤嗎? 好吧,至少它適用於我的情況。
據我了解,您希望 Car 和 Driver 之間存在一對一的關系,即每輛 Car 可以有零個或一個驅動程序。 如果是這樣,您需要將 Driver 的主鍵定義為 Car 實體的外鍵。 你試過這個
class Driver
{
[ForeignKey("Car")]
public int Id { get; set; }
public virtual Car Car { get; set; }
}
這樣,只有一個 Car 記錄將只有一個 Driver 記錄同時引用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.