gpt4 book ai didi

c# - 使用 Fluent API 的 EF 外键

转载 作者:可可西里 更新时间:2023-11-01 08:34:39 24 4
gpt4 key购买 nike

这是我的模型。我有车辆和驾驶员的一对一映射。我将首先创建车辆,然后将驾驶员映射到车辆。

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 之间进行选择非常困惑。如果您能用简单的语言描述它,我们会很高兴。谢谢。

最佳答案

这一行:

public int VehicleId { get; set; }

告诉 EF,through code-conventions , 你想要一个外键 Driver指向 Vehicle .

以下是告诉 EF 您想要来自 Driver 的 1:1 关系至 Vehicle :

public virtual Vehicle Vehicle { get; set; }

您应该删除两者并坚持使用 Fluent API 配置。

关于 WithRequiredPrincipalWithRequiredDependent :

您正在指定 Vehicle 之间的强制关系和 Driver , 导航来自 VehicleDriver ,因此:车辆 1 --> 1 Driver

(Vehicle 是主体,Driver 是从属,因为导航属性位于 Vehicle 并指向 Driver。)

modelBuilder.Entity<Vehicle>()
.HasRequired(d => d.Driver)
.WithRequiredDependent();

您正在指定 Vehicle 之间的强制关系和 Driver , 导航来自 DriverVehicle ,因此:Vehicle 1 <-- 1 Driver

(Vehicle 是依赖项,Driver 是主体,因为导航属性位于 Driver 指向 Vehicle 。)

这两个是类似的:

modelBuilder.Entity<Vehicle>()
.HasRequired(v => v.Driver)
.WithRequiredPrincipal();

modelBuilder.Entity<Driver>()
.HasRequired(d => d.Vehicle)
.WithRequiredDependent();

关于c# - 使用 Fluent API 的 EF 外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21229373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com