[英]EF Foreign Key using Fluent API
這是我的模特。 我有一對一的車輛和司機映射。 我將首先創建車輛,然后將駕駛員映射到車輛。
public class Driver
{
public int Id { get; set; }
public String Name { get; set; }
public int VehicleId { get; set; }
public virtual Vehicle Vehicle { get; set; }
}
public class Vehicle
{
public int Id { get; set; }
public String Name { get; set; }
public virtual Driver Driver { get; set; }
public int VehicleGroupId { get; set; }
public virtual VehicleGroup Vehicles { get; set; }
}
我想在Driver類中使用VehicleId屬性來保持驅動程序正在驅動的車輛ID。
我編寫了以下Fluent API代碼:
modelBuilder.Entity<Vehicle>()
.HasRequired(d => d.Driver)
.WithRequiredPrincipal();
但它在Drivers表中創建了一個新列 - Vehicle_VehicleId並將其映射到Vehicle表上的VehicleId。 我想要VehicleId的Driver表來映射。
此外,我是EF和Fluent API的新手。 我發現在WithRequiredDependent和WithRequiredPrincipal之間選擇是非常困惑的。 如果你能用簡單的話來形容它,我會很高興的。 謝謝。
這一行:
public int VehicleId {get; 組; }
通過代碼約定告訴EF您希望Driver
的外鍵指向Vehicle
。
以下是告訴EF你想要從Driver
到Vehicle
的1:1關系:
公共虛擬車輛車輛{獲取; 組; }
您應該刪除它們並堅持使用Fluent API配置。
關於WithRequiredPrincipal與WithRequiredDependent :
您正在指定Vehicle
和Driver
之間的強制關系,從Vehicle
導航到Driver
,因此:車輛1 - > 1 Driver
(由於導航屬性位於Vehicle
並指向Driver
,因此Vehicle是主體, Driver
是依賴的。)
modelBuilder.Entity<Vehicle>()
.HasRequired(d => d.Driver)
.WithRequiredDependent();
您正在指定Vehicle
和Driver
之間的強制關系,從Driver
到Vehicle
導航,因此: Vehicle
1 < - 1 Driver
( Vehicle
是依賴項, Driver
是principal,因為導航屬性位於Driver
指向Vehicle
。)
這兩個是類似的:
modelBuilder.Entity<Vehicle>()
.HasRequired(v => v.Driver)
.WithRequiredPrincipal();
modelBuilder.Entity<Driver>()
.HasRequired(d => d.Vehicle)
.WithRequiredDependent();
EF會創建Vehicle_VehicleId
列,因為您的Driver
實體上有VehicleId
和Vehicle
。
從您的Driver
實體中刪除VehicleId
和Vehicle
:
public class Driver
{
public int Id { get; set; }
public String Name { get; set; }
}
public class Vehicle
{
public int Id { get; set; }
public String Name { get; set; }
}
使用:
modelBuilder.Entity<Vehicle>()
.HasRequired(d => d.Driver)
.WithRequiredPrincipal();
您正在設置關系,因此無需在實體類中包含手動屬性。
您從導航屬性Vehicle
獲取VehicleId
:
IQueryable<int> vehicleIds = context.Drivers.Select(x => x.Id == 123).Vehicles.Id;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.