EntityFramework Core - 复制实体并将其放回数据库

2024-04-07

是否有最佳实践来复制实体,根据用户输入对其进行一些更改,然后将其重新插入数据库?

其他一些 Stackoverflow 线程提到,即使数据库中存在相同的主键,EF 也会为您处理插入新对象,但我不太确定 EF Core 是如何处理它的。每当我尝试复制对象时,我都会收到以下错误

Cannot insert explicit value for identity column in table when IDENTITY_INSERT is set to OFF

基本上,我只需要一种干净的方法来复制对象,根据用户输入对其进行一些更改,然后将该副本插入回数据库中,并使 Id 正确自动递增。是否有最佳实践或简单的方法来执行此操作,而无需手动将属性设置为 null 或空?

编辑:从数据库检索对象的示例代码:

    public Incident GetIncidentByIdForCloning(int id)
    {
        try
        {
            return _context.Incident.Single(i => i.IncidentId == id);
        }
        catch
        {
            return null;
        }
    }

检索对象后的代码(因为某些字段是自动生成的,例如 RowVersion,它是时间戳):

public IActionResult Clone([FromBody]Incident Incident)
    {
        var incidentToCopy = _incidentService.IncidentRepository.GetIncidentByIdForCloning(Incident.IncidentId);
        incidentToCopy.IncidentTrackingRefId = _incidentService.IncidentRepository.GetNextIdForIncidentCategoryAndType(
            Incident.IncidentCategoryLookupTableId, Incident.IncidentTypeLookupTableId).GetValueOrDefault(0);
        incidentToCopy.RowVersion = null;
        incidentToCopy.IncidentId = 0; //This will fail with or without this line, this was more of a test to see if manually setting would default the insert operation, such as creating a brand new object would normally do.
        incidentToCopy.IncidentCategoryLookupTableId = Incident.IncidentCategoryLookupTableId;
        incidentToCopy.IncidentTypeLookupTableId = Incident.IncidentTypeLookupTableId;
        var newIncident = _incidentService.IncidentRepository.CreateIncident(incidentToCopy);
...

我意识到我可以创建一个全新的对象并进行左手复制,但这似乎效率非常低,我想知道 EF Core 是否提供更好的解决方案。


因此,我在创建这个线程之前比我最初偶然发现它时更多地经历了“可能的重复”线程,并且有一个我忽略的不太高投票的解决方案,它本质上只是获取了所有值从数据库检索对象时一次 - 并且在此过程中不会检索对该对象的引用。我的代码现在看起来像这样:

try
{
    var incidentToCopy = _context.Incident.Single(i => i.IncidentId == id);
    return (Incident) _context.Entry(incidentToCopy).CurrentValues.ToObject();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EntityFramework Core - 复制实体并将其放回数据库 的相关文章

  • TPL Dataflow如何删除块之间的链接

    我想知道 如何删除块之间的链接 换句话说 我想要与 LinkTo 相反 我想写一个基于 tlp 数据流的记录器 我编写了这个接口 并希望在需要时删除 ILogListener 的订阅 public interface ILogManager
  • 从变量使用 OLE DB 源命令的 EzAPI 等效项是什么?

    tl dr 使用 来自变量的 SQL 命令 数据访问模式的 OLE DB 源并分配变量的 EzAPI 代码是什么 Preamble 每月一次 我们需要使用生产数据的子集刷新我们的公共测试站点 我们已确定 根据我们的需求 SSIS 解决方案最
  • 在 MS word .docs 中插入 MathMl 、 Tex 或 LaTex 方程?

    我一直在寻找 C 中 Net 的一些 dll 用于在 MS Word 中插入任何 MathMl Tex 或 LaTex 方程 我尝试了一些类似 DocX 的工具 但它们失败了 你知道吗 或任何提示如何做到这一点 谢谢 Word 2007 可
  • 卸载 SSL 时保护表单身份验证 Cookie

    我正在尝试使用 ASP NET MVC 2 0 和表单身份验证来保护我当前正在开发的网站 为了保护表单身份验证cookie 我想将requiresSSL 属性设置为true 以便浏览器仅在连接处于SSL 下时才发送cookie 并且显然确保
  • 获取在 Unity 中实现接口的所有类型

    如果您只想知道解决方案 请跳至更新 我有一个应用程序 它使用以下代码来获取并运行许多工作方法 var type typeof IJob var types AppDomain CurrentDomain GetAssemblies Sele
  • 如何将带有自定义标头的任意 JSON 数据发送到 REST 服务器?

    TL DR 如何将 JSON 字符串发送到带有 auth 标头的 REST 主机 我尝试了 3 种不同的方法 发现一种适用于匿名类型 为什么我不能使用匿名类型 我需要设置一个名为 Group Name 的变量 并且连字符不是有效的 C 标识
  • send() 使我的程序崩溃

    我正在运行服务器和客户端 我正在我的计算机上测试我的程序 这是服务器中向客户端发送数据的函数 int sendToClient int fd string msg cout lt lt sending to client lt lt fd
  • SQL 选择与带有通配符的 URL 匹配的行

    我在数据库中有一个表 其中一列包含一个 URL 例如http example com users http example com users 轮廓 我得到了一个 URL 例如http example com users 234 profi
  • 如何设置环境名称(IHostingEnvironment.EnvironmentName)?

    默认 ASP NET Core Web 项目包含以下行Startup cs if string Equals env EnvironmentName Development StringComparison OrdinalIgnoreCas
  • 重写 ASP.Net Core 中的 415 响应

    在 ASP net Core 2 1 中 我想返回 Json 响应以及状态代码 415 而不是默认返回的 415 为了实现这一点 我使用资源过滤器 public class MediaTypeResouceFilter Attribute
  • 为什么编译器不对同一翻译单元中的 ODR 违规发出警告

    在同一个翻译单元中 ODR 问题很容易诊断 那么为什么编译器不会针对同一翻译单元中的 ODR 违规发出警告呢 例如在下面的代码中https wandbox org permlink I0iyGdyw9ynRgny6 https wandbo
  • ASP.NET MVC - HybridViewResult (ViewResult /PartialViewResult)

    是否可以构建一个依赖于 Ajax 请求或 Http 请求返回的混合 ViewResultPartialViewResult or ViewResult IsAjaxRequest gt 返回 PartialViewResult IsAjax
  • const int 列表而不是 enum

    我开始研究大型 C 代码库 并发现使用带有多个 const ints 字段的静态类 这个类的行为与枚举完全一样 我想将类转换为实际的枚举 但权力被拒绝 我想转换它的主要原因是这样我可以将枚举作为数据类型而不是 int 这对可读性有很大帮助
  • Time 方法在另一个线程中执行并在超时时中止

    您好 我正在尝试异步运行方法 以便计算持续时间并在超过超时时取消该方法 我尝试使用异步和等待来实现这一点 但没有运气 也许我过度设计了这个 任何输入都会受到赞赏 应该注意的是 我无法更改接口 TheirInterface 因此得名 到目前为
  • 如何在调试时轻松查看事件订阅数量?

    在调试时 我可以查看一下textBox1 TextChanged查看事件订阅数量 如果是 那么我该如何钻取它 我需要知道在给定时间有多少订阅进行调试 因为看起来一个事件被多次触发 但我怀疑这个错误确实是因为textBox1 TextChan
  • 计算距离早上 8 点还有多少小时

    我知道如何计算两个日期之间的差异 但如何计算给定日期与下一个上午 8 点之间的时间 var now DateTime Now var tomorrow8am now AddDays 1 Date AddHours 8 double tota
  • 从多页 tiff 中提取帧 - C#

    有一个多页 tiff 我想从此 Tiff 文件中提取第 n 页 帧 n 并保存它 如果我的多页 tiff 有 3 帧 在我提取一页 帧后 我想留下 1 张图像有 2 页 帧 并且 1 张图像只有 1 页 帧 下面是一些代码 用于将多帧 ti
  • 是否有在 Windows 窗体应用程序中以最少的设置使用 CefGlue 或 CefSharp 的示例?

    我 仍然 使用 Visual Studio 2005 并希望将 webkit 浏览器嵌入到 c winforms 应用程序中 最好作为 winforms 控件 我正在寻找 CefGlue 或 CefSharp 的简单示例以及所需的最少 dl
  • 解析 SWIG 接口文件的结构属性

    这是我不久前问过的问题的延续 为通过参数返回的函数创建类型映射 https stackoverflow com questions 12793973 create a typemap for a function that returns
  • 写入 Windows 7“预览”窗口区域

    如何使用 C 将控件写入或绘制到 Windows 7 预览区域 作为我正在讨论的示例 请在 Windows 7 中打开 Windows Media Player 并播放一首歌曲 播放歌曲时 最小化 Windows Media Player

随机推荐

  • i386 架构的未定义符号:“_SCNetworkReachabilitySetCallback”

    我在 openglES 项目上使用 xcode4 我从教程中添加了应用内购买代码 http www raywenderlich com 2797 introduction to in app purchases http www raywe
  • 使用 sympy 逐步微分

    我正在尝试制作一个 python proram 来查找导数和积分以及展示如何进行 到目前为止 我发现有一个integral steps函数返回所使用的步骤 但我还没有找到等效的微分函数 有谁知道是否有等效的 如果没有 您对如何找到找到导数所
  • 根据属性值动态地将对象数组分成组[重复]

    这个问题在这里已经有答案了 我在尝试着动态地根据属性值将对象数组拆分为组 这是输入的示例 input name john location first name steve location first name paul location
  • 在 Visual Studio 中调试多线程程序时“单步执行”

    One thing that annoys me when debugging programs in Visual Studio 2005 in my case is that when I use step over by pressi
  • 使用js从网站下载或仅保存图像文件

    我想使用 JavaScript 从网站下载或保存图像文件 纯粹的编码本身 因为我想下载近1000个jpeg 所以我想编写一个函数来调用和下载这些图像 URL 可用 我想从中下载特定图像 请指导有关此事 文件网址 http www b2hp
  • 如何在 Jupyter 中使用 JavaScript 选择当前单元格?

    我有一个包含 JavaScript 代码的笔记本单元格 我希望代码能够选择这个特定的单元格 不幸的是 get selected cell取决于我是就地执行单元格 还是执行并选择下面的单元格 Example javascript var ce
  • Android Linkify 文本 - 单一文本视图中的 Spannable 文本 - 就像 Twitter 推文一样

    我有一个 textView 和类似的文本 这是简单的文本KeyWord和Link浏览 在上面的文字中我想做 单击链接即可打开该 URL AND 单击该关键字在我的应用程序中打开一个新活动 also 甚至整个 TextView 都有一个单击事
  • 角度材质工具栏阴影

    我是材料2新手 我试图将主应用程序工具栏固定在屏幕顶部 问题是标高无法正常工作 内容隐藏了工具栏的阴影 我 这是我的 HTML 代码 app content height calc 100 64px overflow auto
  • Quartz属性文件传入环境变量

    我正在尝试将环境变量添加到我的石英属性文件中 但它没有正确加载 这是我的quartz properties org quartz scheduler instanceName scheduler org quartz scheduler i
  • 使用 Mongoose 更新字段子集

    当仅指定 MongoDB 文档的部分字段时 如何使用 Mongoose 更新该文档 即更新指定字段 但保留任何其他现有字段不变 在以下路由处理程序中 用户可以选择要提供的字段 以下作品有效 但使用if感觉报表不是特别大 有更优雅的解决方案吗
  • AWK:打印一个字段中具有最大值的所有行每个其他字段,包括具有最大值和多个列的相同行

    我很感激许多贡献者迅速提供了许多解决方案 AWK 打印一个字段中具有最大值的所有行每个其他字段 包括具有最大值的相同行 https stackoverflow com questions 75392860 awk print all row
  • 在 Alpine 中安装旧版本的软件包

    最近 9 月 5 日 Alpine Linux 软件包存储库已更新为 postgresql client 12 4 我在 Dockerfile 中引用版本 12 3 apk add postgresql client 12 3 现在那个版本
  • 我什么时候应该担心对齐问题?

    我最近了解了一些关于对齐的知识 但我不确定在哪些情况下它会成为问题 有两种情况我想知道 第一个是使用数组时 struct Foo char data 3 size is 3 my arch is 64 bit 8 bytes Foo arr
  • 将 .sort 与 PyMongo 一起使用

    使用 PyMongo 当我尝试检索按 数字 和 日期 字段排序的对象时 如下所示 db test find number gt 1 sort number 1 date 1 我收到此错误 TypeError if no direction
  • 内核模块和SCHED_RR线程的优先级

    我有一个嵌入式 Linux 平台 Beagleboard 运行 Angstrom Linux 连接了两个设备 通过 USB 连接的激光测距仪 Hokuyo UTM 30 通过 SPI 连接的定制外部板 我们编写了一个Linux内核模块 负责
  • python中逆ERF函数的命令[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 在Python中计算函数的逆误差函数 erf 的命令是什么 需要导入哪个模块 For the inverse误差函数 scipy speci
  • Highcharts / Highstock 阶梯线没有垂直“过渡”线?

    是否可以省略 方波 线中的垂直线 我想你可以称之为水平线 这是一个例子 实现这种外观的最简单方法是使用带有自定义 线 符号的散点图 define a custom line symbol Highcharts SVGRenderer pro
  • 免费的非消耗性应用内购买,包含 Apple 服务器上托管的内容

    包含 Apple 服务器上托管内容的非消耗性应用内购买是否可以免费 我在文档中找不到任何有关此内容的信息 并且由于您可以在 iTunes connect 中将应用内购买设置为免费 所以我认为这是可能的 我在 iTunes connect 上
  • 创建反向剪辑路径 - CSS 或 SVG

    我正在尝试创建本质上与 CSS 剪辑路径相反的内容 使用 Clip path 时 图像或 div 会被剪切 以便仅保留您指定的形状 而背景的其余部分将被有效删除 我希望这样 如果我剪辑一个形状 它基本上会在最上层打一个洞并删除形状 而不是背
  • EntityFramework Core - 复制实体并将其放回数据库

    是否有最佳实践来复制实体 根据用户输入对其进行一些更改 然后将其重新插入数据库 其他一些 Stackoverflow 线程提到 即使数据库中存在相同的主键 EF 也会为您处理插入新对象 但我不太确定 EF Core 是如何处理它的 每当我尝