如何在没有数据上下文的情况下更新对象

2023-12-31

实体框架提供了极大的灵活性,可以在同一数据上下文中更新数据

Dim personA = (from p in datacontext.Person where p.PersonID = 1 select p)
personA.name = txtName.value
datacontext.savechanges()

如果我必须将此更新功能移动到仅在请求中接受“Person”的服务层,那么将我的“Person”请求对象分配到数据上下文而不再次进行深度复制的最佳方法是什么?


您需要将实体对象附加到数据上下文。

您还需要使用 AttachUpdeted 方法扩展数据上下文分部类。当您将对象附加到数据上下文时,它不知道已进行更新。下面的代码将告诉数据上下文每个属性都已更新并且需要写入数据库。

public static void Save(EntityObject entity)
{
   using(MyContext ctx = new MyContext)
   {
     ctx.AttachUpdated(entity);
     ctx.SaveChanges();
   }  
} 

public static void AttachUpdated(this ObjectContext obj, EntityObject objectDetached)
{
   if (objectDetached.EntityState == EntityState.Detached)
   {
      object original = null;
      if (obj.TryGetObjectByKey(objectDetached.EntityKey, out original))
         obj.ApplyPropertyChanges(objectDetached.EntityKey.EntitySetName, objectDetached);
      else
       throw new ObjectNotFoundException();
    }
} 

第1条 http://geeks.ms/blogs/quintas/archive/2008/02/21/ado-net-entity-framework-attaching-detached-objects-in-short-lived-contexts.aspx
第2条 http://msdn.microsoft.com/en-us/magazine/cc700340.aspx

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

如何在没有数据上下文的情况下更新对象 的相关文章

随机推荐

  • 将双变量视为布尔值

    测试 double 变量是否等于 0 的更好方法 效率 最佳实践 是什么 1 if a double else OR 2 if a double 0 else 第二个通常更好 更明确地说明您正在做什么 我通常更喜欢if a double 0
  • Zend Framework:如何将旧路由 301 重定向到新的自定义路由?

    我有大量旧路线 需要将其重定向到新路线 我已经在 Bootstrap 中定义了我的自定义路由 protected function initRoutes router Zend Controller Front getInstance gt
  • 如何将模板添加到 Kendo 网格工具栏

    我正在尝试将自定义模板添加到 Kendo MVC 网格 我的模板应该包含两件事 创建按钮以将新记录添加到网格中 自动完成框用于过滤网格中的数据 我正在尝试以下代码 ToolBar toolbar gt toolbar Template
  • 启用/禁用每个控制器/操作方法的会话状态

    我们正在构建一个 ASP NET MVC 应用程序 该应用程序将部署在支持缓存等功能的硬件负载平衡器后面 我们的建议是手动定义负载均衡器应缓存哪些 URL 模式 这对我们来说将是一个相当简单的过程 因为我们有相对静态的 目录 页面 然后是非
  • 将文本绕成 svg 或 canvas 中的圆形

    将文本适合网站上的圆圈 使其随圆圈的曲线流动而不是矩形边界框的一个好的解决方案是什么 这就是我想要实现的目标 页面上有许多黑色圆圈 固定大小 每个圆圈旁边都有一个文本区域 当文本输入到文本区域时 它会出现在黑色圆圈中 以两个轴为中心 如果输
  • Python - 检查字符串是否包含列表中的任何元素

    我需要检查字符串是否包含列表的任何元素 我目前正在使用这个方法 engWords the a and of be that have it for not engSentence the dogs fur is black and whit
  • AngularJS 发送 OPTIONS 请求而不是 POST

    我正在尝试将图片上传到我的 S3 存储桶 我正在使用 AngularJS v1 2 13 当我使用他们的文档中显示的简单案例时 使用以下命令提交表单 action标签 一切正常 但是 如果我想用 Angular 的方式来做ng clickA
  • 优化磁盘IO

    我有一段代码可以分析来自非常大 10 100GB 二进制文件的数据流 效果不错 是时候开始优化了 目前磁盘IO是最大的瓶颈 使用的文件有两种类型 第一种类型的文件由 16 位整数流组成 在 I O 后必须对其进行缩放 以转换为具有物理意义的
  • 当搜索过滤器值从 javascript 更改时,智能表不会更新[重复]

    这个问题在这里已经有答案了 我在用角度智能桌 https github com lorenzofox3 Smart Table 当我使用 st search 指令的搜索过滤器时 当我从 javascript 表更改其值时 不会得到更新 这是
  • MySQL 基于日期列按周分组?

    我有一个带有日期列的表 我想尝试进行分组 使用一周作为时间参考来计算每周发生的行数 我已经这样做了好几天了 使用 GROUP BY Date Date Column 但我不确定如何按周执行此操作 Thanks SELECT FROM GRO
  • Actor 内的异步 API 调用和异常

    我知道关于PipeTo https stackoverflow com a 25225274 1180426 but 有些东西 比如嵌套延续上的同步等待 似乎违背了异步和等待的方式 https github com petabridge a
  • 如何使用 protobuf-net 或其他序列化程序序列化第 3 方类型?

    I have List
  • 如何检查连接字符串是否有效?

    我正在编写一个应用程序 其中用户手动提供连接字符串 我想知道是否有任何方法可以验证连接字符串 我的意思是检查它是否正确以及数据库是否存在 你可以尝试连接一下吗 为了快速 离线 验证 也许可以使用DbConnectionStringBuild
  • 如何在 C 中便携式打印 int64_t 类型

    C99 标准具有字节大小的整数类型 如 int64 t 我正在使用 Windows 的 I64d当前格式 或未签名 I64u like include
  • Spark:广播对象时内存不足

    我尝试广播一个不太大的地图 作为文本文件保存到 HDFS 时约为 70 MB 但出现内存不足错误 我尝试将驱动程序内存增加到11G 执行程序内存增加到11G 但仍然出现相同的错误 memory fraction设置为0 3 缓存的数据也不多
  • 从 url 下载 zip 并使用 SBT 将其解压到资源中

    我想从 URL 下载 zip 文件 我的数据库 并将其解压到特定文件夹 例如资源 中 我想在我的项目构建 sbt 文件中执行此操作 这样做的适当方法是什么 我知道sbt IO已经解压并下载 我找不到使用下载的好示例 我发现的示例不起作用 有
  • 如何在数据库中存储 8000 亿个 GPS 标记 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • rstudent() 返回“mlm”的错误结果(装有多个 LHS 的线性模型)

    我知道对具有多个 LHS 的线性模型的支持是有限的 但是 当可以在 mlm 对象上运行函数时 我希望结果是可信的 使用时rstudent 产生奇怪的结果 这是一个错误还是有其他解释 在下面的例子中fittedA and fittedB是相同
  • F# 说计算表达式中未定义值

    我一直在使用 F 计算表达式开发 State Monad 并且我还尝试利用自定义操作 我遇到了一些没有意义的奇怪行为 当仅在上面两行声明该值时 编译器报告该值不存在 type State lt a s gt s gt a s module
  • 如何在没有数据上下文的情况下更新对象

    实体框架提供了极大的灵活性 可以在同一数据上下文中更新数据 Dim personA from p in datacontext Person where p PersonID 1 select p personA name txtName