更新实体框架 4.1 代码优先中的外键关联

2023-12-02

我得出的结论是,我应该在我的代码优先设计中定义独立关联和外键关联。例如:

public class Book
{
  public int ID {get; set;}
  public int AuthorID {get; set;}
  [ForeignKey("AuthorID")]
  public Author Author {get; set;} 
}  
  1. 根据上面的定义,当我想更改书籍的作者时,是否必须更新 AuthorID,或者只使用下面的行就足够了?
    myBook.Author = 作者;

  2. 如果这是我第一次为这本书定义作者,我会在上面的行中得到一个空异常吗? (当我给书的作者分配一些值时,EF 是否会自动初始化它?)我应该在定义中初始化它:

代码:

public class Book
{
  public int ID {get; set;}
  public int AuthorID {get; set;}

  private Author m_Author;
  [ForeignKey("AuthorID")]
  public Author Author {get
  {
    get
    {
      if (m_Author == null)
        m_Author = new Author();
      return m_Author;
    }
    set
    {
      this.m_Author = value;
    }
  } 
}

首先你不能同时使用两者独立的外键关联- 您使用第一个或第二个。区别在于是否使用 FK 属性。如果使用外键关联,则应该使用外键来建立关系。这就是 EFv4 中引入 FK 关联的原因。

Edit:

使用自定义 POCO(EFv4.1 中常见)和 FK 关系时应使用 FK 而不是导航属性的简单示例:

这工作没有任何问题:

var child = new ChildEntity() {Id = 1};
child.ParentEntityId = 1;  // Assigning FK
context.Childs.Attach(child);
context.Entry(child).State = EntityState.Modified;
context.SaveChanges();

这会引发异常:

var parent = new ParentEntity() { Id = 1 };
context.Parents.Attach(parent);
var child = new ChildEntity() {Id = 1};
child.Parent = parent;  // <-- Assigning only navigation property
// Next line will cause InvalidOperationException:
// A referential integrity constraint violation occurred: 
// The property values that define the referential constraints 
// are not consistent between principal and dependent objects in 
// the relationship.
context.Childs.Attach(child);
context.Entry(child).State = EntityState.Modified;
context.SaveChanges();

这又可以正常工作了:

var parent = new ParentEntity() { Id = 1 };
context.Parents.Attach(parent);
var child = new ChildEntity() {Id = 1};
child.Parent = parent;
child.ParentEntityId = 1; // <-- AGAIN assigning FK
context.Childs.Attach(child);
context.Entry(child).State = EntityState.Modified;
context.SaveChanges();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更新实体框架 4.1 代码优先中的外键关联 的相关文章

  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • 如何在.NET Core上直接调用F#编译器?

    UPD 我想直接从 NET Core SDK 调用 F 编译器 即 fsc 我了解 dotnet build co 但当我只需要编译一个简单的问题时 即 fsc file fs 就足够的情况下 我不想涉及它们 我尝试在 NET Core S
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐

  • iOS 版 Appium 的代码覆盖率

    这个问题似乎已经以多种不同的方式被问到了 所以如果我在这里遗漏了一些明显的东西 请提前道歉 但这对我来说仍然不清楚 我正在使用 Appium 作为功能测试套件的一部分来运行 UIAutomation 测试 如何从该套件生成代码覆盖率指标 理
  • Java 和 HID 通信

    我正在寻找为简单的无线 HID 接口设备编写一个 Linux Windows Mac Java HID 控制器 我对 USB4Java LibUsb 库进行了修改 但没有成功 我已经转向 JavaHIDAPI 的方向 不幸的是 对我来说 除
  • 如何在 SQL (Excel) 中传递参数进行查询

    我将 Excel 链接 到 Sql 它工作得很好 我编写了一些 SQL 脚本 它工作得很好 我想做的就是将参数传递给查询 就像每次刷新一样 我希望能够将参数 过滤条件 传递给 Sql 查询 在 连接属性 中 参数按钮被禁用 所以我无法进行参
  • Spring cron 与普通 cron 比较?

    我试图让 cron 作业在遗留的 Java Spring Hibernate 项目中工作 所以我决定使用 spring 调度程序 我希望 myTask doStuff 在每月第一个星期日的 12 00 运行 在我的 application
  • 二分查找,终止条件为“left < right”,步长更新为“left = mid +1,right = mid”

    我正在读leetcode中的二分查找模板二 它用于搜索需要的元素或条件访问当前索引及其直接右邻居的索引在数组中 def binarySearch nums target type nums List int type target int
  • Java并发修改异常

    我编写了以下代码 导致并发修改异常 我该如何预防呢 这个想法是转义 Map 的所有值并使用新的参数映射重建对象 dO try Map
  • 删除列标签的背景颜色,同时保留绘图背景颜色 ggpairs

    我定义了一个函数来设置 ggpairs 中的背景 以匹配两个变量之间的相关程度 但是 我还想从沿图外部运行的变量标签中删除灰色背景 但如果不删除相关颜色 我就无法做到这一点 library GGally Loads some data mt
  • 在cuda中求对数

    如何在cuda中找到对数 我正在寻找设备功能 Thanks 您可以使用 logf x logf x log2f x log2f x log10f x log10f x 取自CUDA 编程指南 附录 D
  • 在cuda中分配结构数组后变量丢失

    我有一个用 C 语言编写的结构体 其中包含结构体数组 我需要在 GPU 中复制该结构体 为此 我正在编写一个函数 使一些cudaMalloc and cudaMemcpy从主机到设备的结构体中的变量 该结构的一个简单版本 真正的版本内部有各
  • java中为什么需要方法重载和重写? [复制]

    这个问题在这里已经有答案了 可能的重复 多态 重写 重载 我很难知道为什么需要方法重载和覆盖在java中 我读过一些关于此的文章 但无法理解为什么实际上需要它 我还访问了 stackoverflow 中的以下网址 但我还不清楚这个主题 Ja
  • 使用 Entity Framework 4 数据注释进行日期范围验证

    我使用 Entity Framework 4 为 ASP NET MVC3 Razor2 Web 应用程序提供模型 我正在使用 DataAnnotations 来实现验证 我需要将某些日期限制在 SQL Smalldatetime 类型接受
  • jpa 获取连接查询

    这是我的域名的样子 public class Template implements Serializable private static final long serialVersionUID 1L OneToOne cascade C
  • Excel 2007 MS Query 中出现多部分标识符错误,但 SQL Server 2008 中没有

    我有以下 SQL 代码 SELECT pd1 Meter pd1 BasicPool pd1 RateClass pd1 Flowdate SELECT upOrDownContract FROM PipelineData pd WHERE
  • 如何在后台显示 Swift UI 中的通讯通知?

    我正在 SwiftUI 和 firebase 中制作一个聊天应用程序 我想在用户收到新消息时显示通知 我能够在 firebase 中使用云消息发送推送通知 但这些通知不会自动发送 现在我想在用户收到消息时自动发送通信通知 我无法在 swif
  • 如何在 CDE 中添加全选选项来选择组件

    对于学生项目 我们正在与 Pentaho CDE 合作创建一个仪表板 一开始它工作得很好 但现在我们正处于添加多个选择组件的阶段 我们将选择组件的参数插入到Where语句中的SQL查询中 但现在我们遇到了一个问题 即不可能选择一个选择组件中
  • 在 C 中使用 libcurl 保存文件

    我正在从 perl 扩展到 C 并且尝试使用curl 的库来简单地从远程 url 保存文件 但我很难找到一个很好的示例来工作 另外 我不确定是否应该使用curl easy recv或curl easy perform I find 这个资源
  • 使用 const 引用延长临时对象的寿命

    我需要一些关于 const 引用的澄清 从这个链接 const Foo myFoo FuncBar const 引用延长了本地对象的寿命 但当我检查时这个链接尽管他们使用了 const 引用 Sandbox const string n m
  • 如何将Struts 2操作类中的InputStream值传递给JSP页面中的Ajax并将该值转换为JSON数组

    我想将 JSON 数组从 Struts 2 操作类传递到 JSP 页面 我正在尝试将数据集作为字符串发送 我想知道的是 如何在 JavaScript 中读取这些数据 这是我的方法Action class private InputStrea
  • Javascript - 模拟 Chrome 53 上的按键事件

    我正在尝试模拟按键事件 按下 铬53 我在 StackOverflow 上找到的所有解决方案似乎都不起作用 我的目标是拥有一个函数keyCode并用它模拟按键 需要纯JS function keyPressSimulate keyCode
  • 更新实体框架 4.1 代码优先中的外键关联

    我得出的结论是 我应该在我的代码优先设计中定义独立关联和外键关联 例如 public class Book public int ID get set public int AuthorID get set ForeignKey Autho