问题标签 [change-tracking]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
10344 浏览

c# - 如何在 EF 4.1 RC 中关闭 DbContext 级别的更改跟踪?

我遇到了一个似乎很常见的问题:我正在更新我的数据库中的值,但 EF 使用的是对象的原始内存副本,并且这些更改的值不会反映在显示的数据中。我明白为什么会这样,但我想不出解决办法。

最常见的解决方案似乎是设置MergeOptions.NoTracking为完全关闭更改跟踪(或AsNoTracking()在查询时使用扩展方法)并在每次访问对象时强制刷新,这对我的目的来说很好。

我有一个通用的基础存储库,我的其他存储库继承自:

DbContext这样:

如果我All()因此更改存储库的方法:

我得到了想要的结果——当显示产品的页面被刷新时,数据库中的更新就会反映出来。但是,我不能在Get()方法中执行此操作,因为该扩展方法仅适用于IQueryable.

理想情况下,我想在DbContext级别上关闭它,因为我永远不需要更改跟踪,但似乎没有明显的方法可以做到这一点,而且关于该主题的文档几乎为零(除非有人可以指出我给一些?拜托!)。

我尝试在DbContext禁用这些配置选项的情况下添加一个构造函数:

但我必须承认,我只是在猜测它们的真正作用(我只是通过查看源代码才发现它们),而且它们似乎没有任何作用。

任何帮助将不胜感激。如果更多信息/代码有帮助,请告诉我。

0 投票
2 回答
3128 浏览

performance - DbContext ChangeTracking 会影响性能?

我正在将应用程序从 EF1 升级到 EF4.1 我使用“ADO.NET DbContext Generator”模板创建了一个 DbContext 和一组 POCO。

当我查询生成的 DbContext 时,查询的数据库部分需要 4ms 才能执行(使用 EF Profiler 验证)。然后在将结果返回给应用程序之前,上下文需要大约 40 秒(用词:四十!)来完成它所做的任何事情。

EF1 在不到 2 秒的时间内处理相同的查询。

关闭 AutoDetectChanges、LazyLoading 和 ProxyGeneration 可以让我赢得 2-3 秒。

当我使用 AsNoTracking() 扩展方法时,我能够将总执行时间减少到大约 3 秒。

这表明 ChangeTracking 是罪魁祸首。

但是ChangeTracking是我需要的。我必须能够最终保留所有更改,而不必手动选择修改了哪些实体。

有什么想法可以解决该性能问题吗?

0 投票
1 回答
552 浏览

self-tracking-entities - 使用 STE 在子对象中启用更改跟踪

我正在使用 STE,我想启用对象及其子对象的更改跟踪。我现在要做的就是这样。

我正在寻找的是一种自动启用对子对象的更改跟踪的方法,而不必遍历每个对象并明确告诉它开始跟踪更改。

提前感谢您的任何见解。

0 投票
1 回答
602 浏览

entity-framework - 在实体框架中将主键定义为虚拟

在实体框架中将主键属性定义为虚拟有什么好处?

AFAIK,virtual用于延迟加载导航属性和其他属性的更改跟踪。但是我们不需要主键中提到的任何功能。

那么,定义主键虚拟有用吗?

0 投票
2 回答
312 浏览

wpf - 获取 SelfTracking 实体的真实状态,包括导航属性

如果对象有未保存的更改,我想更改对象的显示。我以为我可以只使用ChangeTracker.State,但如果我更改导航属性,它不会更改为 Modified 。

例如,联系人对象包含电话、地址和电子邮件的导航属性。如果我更改联系人的姓名,状态将更改为已修改,但更改电话会使对象的状态保持不变。

0 投票
2 回答
1380 浏览

c# - 基于实体框架推送的更改跟踪

实体框架是否天生就支持任何类型的更改跟踪,以检测数据库中的哪些记录是在某个日期 x 之后添加的,哪些是在某个日期 x 之前添加的?我知道它支持跟踪实体本身属性的变化,但我认为这有点不同。

如果不在实体框架中,我想知道推荐什么简单的方法来实现这一点。

这种情况是自动基于推送的数据传输发生,比如说,每小时,每次发起推送时,服务器必须知道自上次推送以来添加了哪些记录,并推送这些记录。

有谁知道一个标准和可靠的方法?我创建了自己的解决方案(查看主键、DateTime 列等),但不想重新发明轮子。

0 投票
1 回答
889 浏览

entity-framework - 实体框架4:保存父对象时如何获取子对象的原始值?

我在 SE 上看过很多与此相关的帖子,但没有一个能令人满意地回答这个问题。如果有帖子确实回答了这个问题(带有实际的代码示例),那么请指出我的方向。

保存对象时,我需要将信息写入日志。我需要知道原始值和新值。这对于父对象来说非常容易,甚至可以很容易地在任何更改的子对象上获取新值。挑战在于获取子对象的原始值。

例如,用户通过下拉列表更改子对象。这会更改父级外键的值。保存时,我需要在日志中写入更改实体的文本描述(ToString() 值或其他值),而不是外键的值。

ObjectStateEntry 包含父对象的当前值和原始值,但是如何获取更改后的子对象的当前值和原始值?

看起来这应该是可能的,但要么太难完成,要么被微软设计团队忽视了。

提前感谢您的帮助。

0 投票
1 回答
910 浏览

mysql - MySQL - 数据库中*数据*的更改跟踪?

我有一种情况,我需要跟踪 MySQL 数据库中数据的所有更改。

例如,我们在“客户”表中有一个字段,其中包含一个评级,表明与该客户做生意的风险有多大。每当更改此字段时,我都需要将其记录下来,以便我们可以返回并说“好吧,他们是 3,现在他们是 8,”例如。在 MySQL 中是否有任何自动化的方法来处理这个问题,或者我只需将大量的更改跟踪逻辑写入应用程序本身?

0 投票
2 回答
134 浏览

git - 为什么我需要告诉 git 我已经删除了一个文件?

我正在从保存的 zip 文件中构建 git 的开发历史记录。我很高兴需要git add .文件到暂存区,以便提交选定的文件。到现在为止还挺好。

但是我现在的情况是简单地添加第一个(解压缩的)文件集,提交它们,然后删除它们的目录和内容,然后解压缩下一组,添加它们并提交,通常使用变体目录名称。

我的理解问题是,我得到了“未暂存的更改”显示(Git Gui)我删除了一些提交的目录/文件。我知道 git 会拍摄当前文件的快照,所以那里不应该有任何已删除的文件。

那么,我最近的提交是否包含那些已删除文件的副本(在他们的树中)?何时/为什么git rm需要使用而不是普通的rm(或 Windows 等价物)?我应该忽略该消息吗?即是否有关于 git 如何处理竞争性删除和跟踪机制的解释。

0 投票
2 回答
1828 浏览

entity-framework - WCF、实体框架 4.1 和实体的状态

我正在开发一个将公开 WCF 服务的应用程序。我在 DAL 使用实体框架 4.1。问题是当我加载一些实体时(假设一个具有 Order 的客户又具有 OrderDetail)。加载后,我对 Customer、Order 和 OrderDetail 对象进行了一些更改(添加了一些新订单,删除/更新了一些现有订单)并将对象图发送到 WCF 服务以更新它,如下所示。

现在,当我在服务器端收到更新的客户对象图时,我不知道哪个订单被删除,哪个订单被修改,因为现在没有更改跟踪。如何确定要删除的订单和修改的订单?有什么方法可以在 Entity Framework 4.1 中跟踪我的对象图的变化?

注意:以前我使用自我跟踪实体解决了这个问题,但我不得不摆脱 STE,因为我的 WCF 服务也将被 Java 客户端应用程序使用。因此,STE 不是我的选择。