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 - 复制实体并将其放回数据库 的相关文章

随机推荐

  • 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 是如何处理它的 每当我尝