在 EF 中使用 Attach 时,是否可以不覆盖我尚未更新的属性?

2024-03-04

我通过将现有实体附加到我的数据上下文来更新它,如下所示:

    var updatedDocumentState = new AccDocumentState()
    {
        Id = accDocumentState.Id,
        IsDocumentary = accDocumentState.IsDocumentary,
        IsEditable = accDocumentState.IsEditable,
        IsRecursive = accDocumentState.IsRecursive,
        Title = accDocumentState.Title,
       Reportable = accDocumentState.Reportable,

    };
        context.AccDocumentStates.Attach(updatedDocumentState);
        context.ObjectStateManager.ChangeObjectState(updatedDocumentState, System.Data.EntityState.Modified);
        flag = context.SaveChanges() > 0;

这是可行的,但是在保存附加实体后,我没有更新但我想保持原样的现有实体的属性将被覆盖并给出空值。如何附加我的实体并保留我尚未更新的现有实体的属性?


EF 有一个对象数据更改跟踪器。通过代理启用跟踪 Poco 条目的变化 http://msdn.microsoft.com/en-us/library/vstudio/dd456848%28v=vs.100%29.aspx

本质上,您/发现首先读取对象/Poco 实体。 仅更改您想要的属性。并保存。 仅更新更改的属性。

如果您不使用自动 DetectChanges

 this.Configuration.AutoDetectChangesEnabled = false; ////<<<<<<<<< Default true

然后您可以在保存之前调用“检测更改”。

但无论哪种方式,这个概念都是基于先读以获得实体。 进行必要的更改并保存。

仅实际更改会发送回 Db。 例如:

  var mypoco = Context.Set<TPoco>.Find(1);
  myPoco.propertyXyz = "changed";
  // normally not required by default, But incase your are not using tracking proxies , tell ef heads Up
  // Context.Context.ChangeTracker.DetectChanges(); // uncomment when needed
  Context.SaveChanged();

只有实际更改才会发送到数据库。

虽然 Rameez 的 POST 是正确的,但它没有说明为什么需要将整个条目设置为已更改,也没有说明为什么要这样做?为什么要从文档中链接州入境职位?

   Context.Entry(poco).State = state;  // why do this ? or the objectContext equivalent 

这将导致所有值的更新集在 SaveChanges 时进入数据库 因为所有字段都将被视为已更改。这不是使用 EF 的好方法。

了解 EF 中的自动检测更改非常重要。 看自动检测变化 http://msdn.microsoft.com/en-us/data/jj556205 and 实体状态和 SaveChanges http://msdn.microsoft.com/en-us/data/jj592676

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

在 EF 中使用 Attach 时,是否可以不覆盖我尚未更新的属性? 的相关文章

随机推荐

  • 在同一个 Activity 中的两个 GridView 之间切换

    我一直在寻找如何解决几个问题 并得到了一些问题的答案 但有一件事仍在建设中 如果你们都不能帮助我 就不会完成 我一直在尝试放大和缩小 GridView 但转向了其他解决方案 因为我只需要两种状态 概述和详细视图 因此我制作了两个 Gridv
  • SF 符号分层、调色板和多色渲染模式颜色?

    在 WWDC 2021 上 Apple 宣布了 SF Symbols 3 它将在 iOS 15 和 macOS 12 中支持新的多色 SF Symbols 新的色彩渲染模式可通过图层注释增加符号的深度和强调 https developer
  • Vue 组合 API 使用 VueAxios?

    I am in main js输入vue axios main js import createApp from vue import axios from axios import VueAxios from vue axios impo
  • 你能让弹性盒子项扩展以适应父项而不是内容吗?

    我正在使用一个flexbox使 div 占据浏览器窗口中剩余的垂直空间 但我想防止它超出该范围 当其内容超出其垂直尺寸时 我希望滚动条显示在现在太小的 Flexbox 子项中 这可能吗 或者我应该使用其他一些布局技术吗 这是一个 JSFid
  • 闭包返回值(以前为completionBlock)

    我想在长期操作完成后返回一些值 但此外我想将逻辑和图形用户界面分开 例如 我有两节课 SomeServices swift 有一个名为 getDataFromService 的方法 MyTableViewController swift 将
  • 在 jQuery 中使用 FormData 提交表单 - 无需 Ajax 且无需隐藏字段

    我有一个函数 可以在表单提交上执行一些自定义工作 通过 Ajax 发送一些数据 将返回的数据附加到新的 FormData 对象中 现在我需要使用此 FormData 以常规方式 而不是通过 Ajax 提交表单 我知道它可以通过隐藏字段来实现
  • 如何检查 jpeg 是否适合内存?

    使用打开 JPEG 图像imagecreatefromjpeg很容易导致致命错误 因为所需的内存超过了memory limit A jpg小于 100Kb 的文件很容易超过 2000x2000 像素 打开时将占用大约 20 25MB 的内存
  • 如何在 Docker 容器中设置 PS1

    我想设置 PS1容器的环境变量 它帮助我识别多级或复杂的 Docker 环境设置 目前 docker 容器提示 root container id 如果我可以按如下方式更改它 我可以通过查看来识别容器 PS1提示本身 Level 1 roo
  • Spark - 写入Avro文件

    在如下流程中使用 Spark 使用 Scala API 编写 Avro 文件的常见做法是什么 从 HDFS 解析一些日志文件 对于每个日志文件应用一些业务逻辑并生成 Avro 文件 或者可能合并多个文件 将 Avro 文件写入 HDFS 我
  • 从oracle数据库获取唯一约束列名

    我正在从 UI 实现搜索功能 为此我想提供具有唯一约束的列名称下拉列表以及任何主键列 如果存在 以便用户可以使用任何这些选定的列相关数据进行搜索 我搜索过这样的查询但没有找到 就像是 SELECT COLUMN NAMEs FROM TAB
  • Android Listview 删除项目之间的任何空格

    我想删除 ListView 中不同项目之间的任何空格 代码
  • 设置 android:windowSoftInputMode="adjustPan" 时如何滚动布局?

    我的活动有一个顶部栏和一个底部栏 顶栏和底栏之间的空间我有一个线性布局 里面有几个编辑文本视图 因为我不希望每次软键盘出现时都调整布局大小 所以我在清单中为我的活动设置了 android windowSoftInputMode adjust
  • 如何禁用 Ext JS 按钮

    我有一个 id 为的按钮btnAdd我想在某些事件触发时禁用它 当某些窗口关闭时该事件发生 所以我尝试了下面的代码 但它不起作用 Ext create Ext window Window Some initialization code g
  • Swift:无法读取数据,因为它的格式不正确

    我尝试使用 Alamofire 调用 POST Api 但它向我显示格式不正确的错误 这是我的 JSON 响应 source nome LOTERIAS BELEM endereco R DO COMERCIO 279 uf AL cida
  • python 组/用户管理包

    我正在寻找python用户 组管理包 创建用户组并向该组添加 删除成员 我找到了flask dashed https github com jeanphix Flask Dashed 这或多或少是我一直在寻找的 但它只支持一个用户添加 删除
  • 将 slug 保存到数据库或动态生成更好?

    我正在开发一个 django 项目 并希望在 url 末尾包含一个 slug 就像在 stackoverflow com 上所做的那样 http example com object 1 my slug generated from my
  • Jetpack Compose - 如何在 LazyColumn 中搜索并显示房间中的特定数据?

    我想使用搜索查询从房间表中获取数据 并将结果显示在 LazyColumn 中 而不是我在那里显示的 someList 中 换句话说 如何使用 compose from room table 实现搜索功能 Getting the list f
  • AssertEquals 2 列表忽略顺序

    我相信这应该是一个非常简单的问题 但不知何故我无法在谷歌中找到答案 假设我有 2 个字符串列表 首先包含 字符串A 和 字符串B 第二个包含 字符串B 和 字符串A 注意顺序差异 我想测试它们JUnit检查它们是否包含一模一样字符串 是否有
  • 虽然声明不起作用?

    include
  • 在 EF 中使用 Attach 时,是否可以不覆盖我尚未更新的属性?

    我通过将现有实体附加到我的数据上下文来更新它 如下所示 var updatedDocumentState new AccDocumentState Id accDocumentState Id IsDocumentary accDocume