JsonPatchDocument 到复杂的实体框架跟踪对象上

2024-01-29

我正在尝试使用 Json 补丁来更新存储在实体框架数据上下文中的实体。

我有像这样的实体类 -

public class Customer
{
    public Guid Id { get; set; }

    public string Name { get; set; }

    public virtual ICollection<Quote> Quotes { get; set; }
}

public class Quote
{
    public Guid Id { get; set; }

    public int Order { get; set; }

    public string Status { get; set; }
}

要将补丁应用到Customer对象,我从数据上下文查询源,然后应用补丁,就像这样 -

var entity = dataContext.Customers.Find(id);

patch.ApplyTo(entity);

dataContext.SaveChanges();

Where patch由组成 -

[{ "op": "replace", "path": "/name", "value": "new name" }]

这对于源对象的简单更新来说效果很好,当我想修补链接的实体时就会出现问题,请考虑以下修补程序

[{ "op": "replace", "path": "/quotes/0/status", "value": "Closed" }]

我面临的第一个问题是——

未找到路径段“0”指定的目标位置

我发现的解决这个问题的唯一方法是调用改变从上下文查询实体的方式 -

var entity = dataContext.Customers
    .Include(ent => ent.Quotes)
    .SingleOrDefault(ent => ent.Id == id);

entity.Quotes = entity.Quotes.OrderBy(ent => ent.Order).ToList);

这不太理想,因为我不喜欢查询数据来更新它的想法。我想知道是否有更干净的方法来解决这个问题。


这是我找到的解决方案 -https://gist.github.com/brendanmckenzie/a50f4eb7d5913372d01fef8e73c5dc9b https://gist.github.com/brendanmckenzie/a50f4eb7d5913372d01fef8e73c5dc9b

该代码处理创建和更新存储在实体框架中的实体。修补效果很好,因为 EF 会跟踪 JsonPatch 应用的更改。

那里有一些额外的代码有点混乱(NormaliseOperations)有助于处理链接实体;即,例如如果Quote引用了另一个实体。

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

JsonPatchDocument 到复杂的实体框架跟踪对象上 的相关文章

随机推荐

  • 如何在数据框中转换列? [复制]

    这个问题在这里已经有答案了 我正在从 hbase 获取数据并将其转换为数据帧 现在 我在数据框中有一列string数据类型 但我需要将其数据类型转换为Int 尝试了下面的代码 但它给我一个错误 df withColumn order ord
  • 显然 conda 找不到一些非常常见的包:我做错了什么?

    环境 我正在使用conda4 6 7 在配备 High Sierra 的 Mac 上 我有一些遗留的 Python 代码 首先我想运行它 当然 由于这是研究代码 我没想到会找到 花哨的东西 例如测试套件 但我希望至少有一个requireme
  • 项目无法识别 cucumber-picocontainer 依赖性

    我目前正在使用 Cucumber JUnit 和 Selenium 开发 Java 测试框架 我已经参与过类似的项目 但我在这个项目上遇到了问题 我正在尝试创建一个单例的 Context 类 我想使用 cucumber picocontai
  • UINavigationController 横向模式下的后退按钮问题?

    我的iPhone应用程序之前支持纵向模式 现在我想也支持横向模式 除了导航控制器后退按钮之外 我的应用程序中的一切都工作正常 我在导航控制器中使用了表格视图 当我在横向模式下单击后退按钮时 视图会弹出并加载以前的视图 但动画很奇怪 我已经给
  • Angularjs 列表和详细视图

    这是我的基本场景 对于项目列表 摘要视图 我想显示在同一页面上单击的项目的详细信息视图 我拿了这个jsfiddleexample http jsfiddle net pkozlowski opensource 65Cxv 7 并将其改造成这
  • 如何通过自动显式查看类型推断的结果?

    我最近正在研究C 11 14的自动功能 出于教育目的 我想明确显示我的代码的类型推断结果 我尝试了 typeid name 但我发现这种方法有两个问题 输出有时难以理解 例如 NSt3 16vectorIiNS 9allocatorIiEE
  • 如何用JQuery实现FLXHR进行跨域交互

    我正在使用 JQuery FLXHR 从跨浏览器获取数据 下面是示例jquery代码 set up the domain that we re going to call and tell flXHR not to try to parse
  • 创建全天活动失败

    我正在尝试创建一个全天活动 let foobar any subject calendarEvent Title v5 body contentType HTML content calendarEvent calendarEvent De
  • 代码覆盖率和分析之间的区别

    代码代码覆盖率和分析之间有什么区别 这是最好的代码覆盖率开源工具 代码覆盖率是对代码已运行量的评估 这用于查看测试对代码的执行情况 分析用于查看代码各个部分的执行情况 这些工具取决于您使用的语言和平台 我猜你正在使用Java 所以推荐代码覆
  • 什么是 stdole2.tlb

    stdole32 tlb 包含所有基本类型定义 如果我们使用 MIDL 则每个库都必须导入它 但是当我创建 ATL DLL 项目时 lib 文件看起来像这样 import oaidl idl import ocidl idl uuid 4C
  • SOA 服务设计/身份验证

    我对 SOA 相当陌生 因此正在尝试 目前 对我来说最大的问题是身份验证 我目前的想法涉及以下内容 客户端向身份验证 用户服务发送某种身份验证消息 该服务查询数据库 如果找到用户并且密码有效 它将使用会话 ID 进行响应 该 ID 将用于所
  • 在 IIS 中运行发布的网站时出现 NullReferenceException

    我有一个在将其添加到 IIS 之前发布的网站 之后我将发布的网站设置为 IIS 中的默认网站 当我通过表单插入值时 出现错误 对象引用未设置为对象的实例 网站在IIS中运行而不发布时没有问题 使用数据网格插入值时会发生错误 错误信息如下 应
  • mode=remoteOnly 的 ASP.NET customErrors 和 global.asax 处理异常

    我在 Web 配置文件中设置了自定义错误 如下所示
  • 使用正则表达式匹配记录中的名称、对话和动作

    给定如下所示的字符串对话 我需要找到与每个用户对应的句子 text CHRIS Hello how are you PETER Great you PAM He is resting PAM SHOWS THE COUCH PETER IS
  • 我可以生成没有绑定和服务信息的 WSDL 文件吗?

    我遇到一个问题 客户可以使用 net beans 以及在 NET 中打开 SAP WSDL 但不能在 SOAPUI 中打开 当我检查 WSDL 时 我发现服务和绑定标签未定义或不包含此类标签 WSDL 以端口类型信息结束 在 SOAPUI
  • 如何为Python制作一个具有良好图形效果的.exe?

    我有一个 Python 应用程序 我决定创建一个 exe 来执行它 这是我用来执行 exe 的代码 coding cp1252 from distutils core import setup import py2exe sys os sy
  • “workbooks.worksheets.activate”有效,但“.select”无效

    谁能告诉我为什么当我引用特定的工作表时我可以使用 workbooks A worksheets B activate but not workbooks A worksheets B select 您无法选择非活动工作簿中的工作表 您必须首
  • ASP.NET Core 在开发环境中禁用身份验证

    是否可以在 ASP NET Core 应用程序中 禁用 身份验证而不更改其逻辑 我有一个 net 网站 它使用外部身份服务器应用程序进行身份验证 无论如何 我希望能够在开发时模拟身份验证 ASPNETCORE ENVIRONMENT Dev
  • 使用 pm2 在同一节点上运行多个节点实例

    我想使用 pm2 在单个服务器上运行 2 个 node js 应用程序 这些应用程序需要通过 puppet 进行部署 请您告知这是否可能 问候 巴拉 您可以通过 pm2 将相同的 Nodejs 应用程序作为集群运行 https github
  • JsonPatchDocument 到复杂的实体框架跟踪对象上

    我正在尝试使用 Json 补丁来更新存储在实体框架数据上下文中的实体 我有像这样的实体类 public class Customer public Guid Id get set public string Name get set pub