这是我的模型。我有车辆和驾驶员的一对一映射。我将首先创建车辆,然后将驾驶员映射到车辆。
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。我想要映射 Driver 表的 VehicleId。
另外,我对 EF 和 Fluent API 是全新的。我发现在 WithRequiredDependent 和 WithRequiredPrincipal 之间进行选择非常令人困惑。如果您能用简单的话描述它,我会很高兴。谢谢。
这行:
公共 int 车辆 ID { 获取;放; }
正在告诉EF,通过代码约定,你想要一个外键Driver
指向Vehicle
.
以下内容告诉 EF 您想要 1:1 关系Driver
to Vehicle
:
公共虚拟车辆Vehicle { get;放; }
您应该删除两者并坚持使用 Fluent API 配置。
关于需要本金 vs. 与必需的依赖:
您正在指定之间的强制关系Vehicle
and Driver
,导航自Vehicle
to Driver
,因此:车辆 1 --> 1Driver
(车辆为主体,Driver
依赖项,因为导航属性位于Vehicle
并指向Driver
.)
modelBuilder.Entity<Vehicle>()
.HasRequired(d => d.Driver)
.WithRequiredDependent();
您正在指定之间的强制关系Vehicle
and Driver
,导航自Driver
to Vehicle
, thus: Vehicle
1 Driver
(Vehicle
是依赖者并且Driver
主体,因为导航属性位于Driver
指向Vehicle
.)
这两个是类似的:
modelBuilder.Entity<Vehicle>()
.HasRequired(v => v.Driver)
.WithRequiredPrincipal();
modelBuilder.Entity<Driver>()
.HasRequired(d => d.Vehicle)
.WithRequiredDependent();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)