LINQ to Entities - 如何在调用 SaveChanges() 后最好地获取 IDENTITY 值

2023-12-01

该网站上提出了许多与执行插入后检索 IDENTITY 相关的问题。我们获取身份的方法是在调用 SaveChanges() 之后立即进行以下调用;

context.MyClass.OrderByDescending(c => c.Id).FirstOrDefault();

这似乎一致地工作可能是完全足够的;但是,如果在调用之间添加另一条记录,则可能会出现错误。所以第一个问题是,考虑到 EF 在事务上下文中执行,这种方法是否合理?

其次,对以下问题的回答表明可能有更好的方法。

Linq to SQL - 如何在 InsertOnSubmit() 之后查找 IDENTITY 列的值

在该答案中,调用 SubmitChanges() 后,以下调用(其中“tst”代表用户的类别)检索该值。

Response.Write("id:" + tst.id.ToString)

这似乎与 LINQ to Entities 中的工作方式完全相同,在调用保存更改后,类的实例现在包含 id。

context.MyClass.Add(myClass);
context.SaveChanges();
int myNewIdentity = myClass.Id;

由于我们要求类实例的实际 ID(实际记录),因此它看起来是安全的。而且,EF 的设计者应该提供此类基本功能,这似乎是合乎逻辑的。任何人都可以确认这是获取身份的正确方法或至少是最佳实践吗?


是的,LINQ-to-Entities(以及就此而言的 LINQ-to-SQL)将在调用 SaveChanges 后将生成的标识列设置回实体中。对于无法提前设置的任何外键,它也会这样做(例如,一个新的父行+一个新的子行保存在一起,并且在 SaveChanges 之后,您将在子行的 FK 中获得正确的值)价值)。

您特别关心的问题记录在“使用实体密钥”页面中:

http://msdn.microsoft.com/en-us/library/dd283139.aspx

特定部分是“实体键和添加的对象”,特定步骤是:

4 - 如果 INSERT 操作成功,服务器生成的值将写回 ObjectStateEntry。

5 - ObjectStateEntry 使用服务器生成的值更新对象。

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

LINQ to Entities - 如何在调用 SaveChanges() 后最好地获取 IDENTITY 值 的相关文章

随机推荐

  • 在 html 中创建不可见的文本字段?

    我正在尝试将 html 代码放入我老板提供的设计模型中 并且一些美学 例如搜索栏的形状 有点奇怪和复杂 作为一个简单的解决方案 我想我只需将一个文本字段放在搜索栏的图像上 但我无法让它工作 谁能建议一种方法 将文本字段分层在图像上 使其不可
  • R:根据嵌套组计算比例

    我正在使用 R 编程语言 我有以下数据集 set seed 123 library dplyr Patient ID 1 5000 gender lt c Male Female gender lt sample gender 5000 r
  • 尝试使用 PDO 更新记录

    我更新了问题代码 但仍然有问题 没有错误 但没有更新记录 还需要弄清楚如何写入记录 更新成功 我被困在这个更新页面了
  • 无法打开数据库-Android

    我正在使用 SQL 开发一个简单的 Android 应用程序 我遵循以下指南 http www reigndesign com blog using your own sqlite database in android applicati
  • 使用 AVCaptureSession 和 AVAssetWriter 翻转相机时无缝录音

    我正在寻找一种在前后摄像头之间切换时保持无缝音轨的方法 市场上的许多应用程序都可以做到这一点 一个例子是 SnapChat 解决方案应使用 AVCaptureSession 和 AVAssetWriter 此外 它不应该明确使用 AVMut
  • .Theninclude 用于 Entity Framework Core 2 中的子实体

    以前 使用 net 4 5 2 和 EF 6 时 我有一个通用的Get接受多个的方法包括如下 public abstract class DataContext IdentityDbContext
  • 获取特定时间范围内所有发生变化的文件

    Bash 中的一个非常基本的问题 但我似乎无法弄清楚 我正在寻找一个带有管道的单行命令 在 bash 中查找当前目录中上次在 13 15 到 13 30 之间更改的所有 py 文件 与日期无关 我想我可以用ls and cut但我不确定这是
  • Android - 从另一台设备访问 Google Drive appdata 文件夹,但应用程序相同

    我的应用程序设置为允许将备份保存到 Google Drive 应用程序数据文件夹 这一切在同一台设备上运行得非常好 当我进行备份时 删除应用程序的数据 然后恢复一切正常 但是 当我尝试在一台设备上备份 然后在另一台设备上安装并尝试恢复时 没
  • python opencv-寻找圆(太阳),图片中圆心的坐标

    我是新来的 也是编程方面的新手 我有一个问题 我有 16 位 bmp 文件中的太阳图片 图片看起来是黑色背景的白色圆圈 我想找到一个圆并在 x y 坐标中确定其中心 我有这个脚本 import cv import numpy as np o
  • 执行 a.out 文件时出现问题 (C++) MacOS Sierra 10.12.1

    我刚刚更新到 Sierra 似乎我的编译器由于某种原因崩溃了 我编写的代码在更新之前工作正常 所以我确信这不是问题 但现在当我尝试执行它时它就无法工作 这是输出 g source cpp a out dyld mach o but buil
  • 什么是套接字?这是一个过程吗?

    我正在研究操作系统概念 我发现套接字作为通信的端点 那么套接字到底是什么 它是系统通信的一个过程吗 提前致谢 通过阅读维基百科文章 我可以明白为什么您可能会感到困惑 套接字是一个虚拟设备 也就是说 它是一种用软件编写的设备 没有物理设备 因
  • 如何在 Struts 2 中使用 jQuery Ajax 检查唯一用户?

    我有任何应用程序email id是唯一的 并且当最终用户输入他的email id我已经通过 Ajax 触发了 SQL 查询 它检查这是否email id存在或不存在 直到这里它都工作正常但现在我如果那样怎么办email id存在 然后我想将
  • Android上Service和Activity的通信

    Android 上 Activity 和 Service 之间的通信方式有哪些 今天我学习了如何通过从 Activity 发送 Intent 并使用 BroadcastReceiver 进行回复来进行通信 我还有哪些选择 有人有这方面的教程
  • 在内存中而不是物理文件中创建 PDF

    如何使用 itextsharp 在内存流而不是物理文件中创建 PDF 下面的代码正在创建实际的 pdf 文件 相反 我如何创建一个 byte 并将其存储在 byte 中 以便我可以通过函数返回它 using iTextSharp text
  • 在多线程应用程序中使用 GeckoFX

    我在使用 GeckoFX 时遇到了如何准确处理线程的问题 当尝试在其他线程中使用 GeckoWebBrowser 时 它似乎不断抛出错误 具体来说 我在此测试应用程序中尝试执行的操作是生成网页的缩略图并将其显示在表单上 而不是 WebBro
  • Delphi - 使用表单在应用程序内安装、启动、停止服务[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我有 Delphi 应用程序 我添加了service对此 我如何安装并启动和停止它主表格
  • PreferenceActivity 中的自定义标题栏?

    我在所有活动中使用自定义标题栏 但我可以在 PreferenceActivity 中使用它 我在 PreferenceActivity 中能做的就是 Override protected void onCreate Bundle saved
  • Java中的重叠继承

    我有一个重叠的继承层次结构 系统了解可以是客户 提供商和代理的人员 一个人必须属于这些类别之一 但可以属于两个或三个 即一个人可以同时是客户和提供者 在数据库中 我认为问题已经解决 每个类一个表 人员 客户端 提供者和代理表 以及从子类表的
  • 从 Font Awesome 中提取 SVG

    我想从中获取 SVG 路径数据字体真棒字形 以便我可以在 HTML 中直接将它们用作 SVG 我认为这就像复制粘贴路径数据一样简单fontawesome webfont svg 但是当我在 HTML 中使用它时 符号全部呈现颠倒 有人知道为
  • LINQ to Entities - 如何在调用 SaveChanges() 后最好地获取 IDENTITY 值

    该网站上提出了许多与执行插入后检索 IDENTITY 相关的问题 我们获取身份的方法是在调用 SaveChanges 之后立即进行以下调用 context MyClass OrderByDescending c gt c Id FirstO