使用 Fluent API 的 EF 外键

2023-11-22

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

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,导航自Vehicleto Driver,因此:车辆 1 --> 1Driver

(车辆为主体,Driver依赖项,因为导航属性位于Vehicle并指向Driver .)

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

您正在指定之间的强制关系Vehicle and Driver,导航自Driver to Vehicle, thus: Vehicle1 Driver

(Vehicle是依赖者并且Driver主体,因为导航属性位于Driver指向Vehicle.)

这两个是类似的:

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

modelBuilder.Entity<Driver>()
            .HasRequired(d => d.Vehicle)
            .WithRequiredDependent();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Fluent API 的 EF 外键 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 如何以编程方式重命名Google存储中的文件夹?

    我有一个谷歌存储java客户端 我想重命名云端的文件夹 有办法做到吗 我看到了更新帖子但我不知道如何更改名称元数据 这是我的尝试 但我不知道该填写什么 entity 并且没有oac setName public void renameDir
  • Access-Control-Allow-Headers 列表中不存在请求标头

    在我的 API 中 我有以下代码 public class CustomOAuthProvider OAuthAuthorizationServerProvider public override Task MatchEndpoint OA
  • SKSpriteNode,添加到父挂钩/从父挂钩中删除

    当 SKSpriteNode 或 SKNode 添加到父节点或从父节点中删除时 类中是否有任何 最佳实践 方法来挂钩事件 无需 Kobold Kit 您可以对 SKSpriteNode 或任何 SKNode 事实上 进行子类化并扩展remo
  • 从链表中有效地选择一组随机元素

    假设我有一个长度为数字的链表N N非常大 我事先不知道确切的值N 我怎样才能最有效地编写一个将返回的函数k完全地随机数从列表中 有一个非常好的且有效的算法 使用称为水库取样 让我首先给你它history Knuth在 p 上调用该算法 R
  • TPL Dataflow,替代 JoinBlock 限制?

    我寻找 JoinBlock 的替代方案 它可以通过 n TransformBlocks 链接到 并将所有 TransformBlock 源块的消息连接 合并在一起 以便将此类集合传递到另一个数据流块 JoinBlock 可以很好地完成这项工
  • 禁用 MacVim 键盘快捷键

    有什么方法可以禁用 MacVim 中的键盘快捷键吗 我的意思是像这样的快捷方式Cmd s例如 我想说服自己使用类似的东西 w 但如果我可以使用保存文件 我就不能这样做Cmd s 你懂我的意思吗 但我当然仍然想使用 GUI 那么有什么方法可以
  • 如何绘制带有排序水平误差线的图表(带有错误标记的排序条形图)?

    我想将平均值和标准误差绘制为水平条形图 并且我希望对平均值进行排序 我找到了使用格子绘制水平排序条形图的方法 但我不知道如何添加错误标记 以下是我的数据和我想出的 R 代码 data lt structure c 0 67 0 67 0 7
  • 无需克隆即可计算 GitHub 存储库中的行数

    有类似的问题 但所有这些问题都需要您克隆存储库 然后在其上运行一些实用程序 我需要一个可以给我这些统计数据的网络服务 比如使用 URL 例如http my sloc counter com project1从 GitHub 获取项目 1 的
  • 如何将对象序列化为JSON?

    我需要将一些对象序列化为 JSON 并发送到 WebService 如何使用 org json 库来做到这一点 或者我必须使用另一台 这是我需要序列化的类 public class PontosUsuario public int idUs
  • 原生 Java 字节码检测

    对于 Java 中的字节码检测 有 asm 框架以及 bcel 和 javaassist 库 但是 我需要在本机代码中进行检测 因为在 javaagent 运行时已经加载了一些 java 类 例如 java lang Thread java
  • 编辑按钮未显示在 UITabBarController 的 MoreNavigationController 中

    A UITabBarController被压入堆栈 let presenter presentingViewController as UINavigationController let tabvc UITabBarController
  • WCF客户端代理初始化

    我正在使用 WCF 服务并使用 VS 2008 服务引用创建其代理 我正在寻找调用 WCF 服务方法的最佳模式 我是否应该在每次调用服务方法时创建客户端代理实例并在完成后立即关闭客户端 当我分析我的客户端应用程序时 我可以看到在初始化代理客
  • Google SDTT 中的错误:“为 url 提供的所有值必须指向同一页面。”

    我正在尝试为 ecom 网站上的产品列表创建一些 JSON LD 结构化数据 但在使用 Google 的结构化数据测试工具时遇到错误 到目前为止 我有这个 context http schema org type OfferCatalog
  • NSXML解析器错误域 111

    下面的代码打印以下消息 Error Domain NSXMLParserErrorDomain Code 111 The operation couldn t be completed NSXMLParserErrorDomain erro
  • 如何向变成 iBeacon 的 iPhone 发送数据?

    如何将数据发送到充当 iBeacon 的 iPhone 我正在寻找如下流程 搜索附近的 iBeacons 连接到一些 iBeacon 在设备之间交换数据 有谁知道如何将不同的蓝牙功能组合在一起 这可能吗 提前谢谢 标准iBeacons 是仅
  • 更新flutter后启动黑屏

    我最近更新了颤振 为了运行 flutter 项目 我通过 USB 使用 android 更新后 每个项目在启动时都会显示黑屏 以前的版本运行良好 我尝试更改启动画面 drawable launch background xml 在andro
  • 如何检查 uiimage 是否为空? (空、透明)

    这是检查是否存在的最佳方法UIImage是空白的 我有这个绘画编辑器 它返回一个UIImage 如果这张图片上没有任何内容 我不想保存它 试试这个代码 BOOL isImageFlag self checkIfImage image 和 c
  • 可以阻止 Enter 仅从某些输入字段在 JavaScript 中提交表单 [重复]

    这个问题在这里已经有答案了 我有一个表格onkeyup触发为某些字段创建建议框 我能够捕获向上箭头 向下箭头和转义的击键 并相应地使用它们在建议框中移动或关闭它 我想使用 Enter 将他们的选择移动到触发建议的输入字段中 但是 我似乎无法
  • 为什么价值观不同? C++ 指针

    我正在谷歌搜索一个解决方案来找出 C 中数组的长度 我发现的解决方案之一是这样的 int arr 1 2 3 4 5 6 int size arr 1 arr size is the length of the array 我很困惑 arr
  • 使用 Fluent API 的 EF 外键

    这是我的模型 我有车辆和驾驶员的一对一映射 我将首先创建车辆 然后将驾驶员映射到车辆 public class Driver public int Id get set public String Name get set public i