问题标签 [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.
entity-framework-4.1 - DbContext.ChangeTracker、DbContext.Entry() 不一致
在调试器下,我有一个DbContext.ChangeTracker.Entry(e)
返回带有 a 的条目的State
情况Detached
。当我在查找 时枚举DbContext.ChangeTracker.Entries()
底层证券的结果和条目时,我找到了一个带有(预期)的条目。ObjectContext
e
State
Unchanged
到底是怎么回事?
以下是一些额外的细节:
- 使用 POCO 实体。
- 更改跟踪已开启
- 代理创建已关闭
- 延迟加载已关闭
- 第一次保存实体时不会出现问题(例如添加到上下文中);将旧实体放入上下文然后尝试对其进行更改时发生。这是一个聚合根,包含许多不应更改的“参考”实体
Equals
在实体上被覆盖IEquatable<T>
并被实现。该代码由 T4 生成。- 我正在使用一个通用存储库实现,它以声明方式配置为生成保存规则(例如,是否应该添加、附加/修改、附加/未更改实体。它似乎以正确的顺序执行此操作。例如,添加了聚合根/attached last 因为首先附加它会带来处于修改状态的其他实体(首先添加那些未更改的实体可以防止这种情况发生)。
c# - 为什么实体框架会检测已修改但重置的属性的更改?
如果我修改了 POCO 实体的属性,但将其重置,EntityFramework 仍然会说有更改。
已修改的条目:
你如何处理这个案子?
c# - 如何在更新时检测分离实体的单个属性更改?
我们正在使用 EF 更改跟踪来触发某些事件。例如,如果一个人实体的电子邮件地址发生了变化,我们可以向管理员或类似性质的人发送电子邮件。
我想知道是否有一种简单的方法可以调用类似的方法来CheckForChangesOnAttach(entity)
查询数据库以获取当前数据并与分离的实体进行比较以将某些属性设置为已更新。除了附加分离实体的大图之外,我自己似乎不应该太难做的事情,这就是为什么我想知道是否有类似的东西内置(我们首先使用代码,顺便说一句)。
我们的系统对分离的实体做的不多,所以 99% 的时间我们不需要这样的东西,所以我不太关心性能。
silverlight - 更改跟踪视图模型:何时/如何“开始跟踪”?
我需要一个跟踪更改的视图模型,以便用户可以看到响应编辑和回滚部分的视觉变化。现在,我“打开”更改跟踪作为视图模型构造函数的最后一步(必要的,因为有时视图模型是从模板构造的,或者具有PropertyChanged
在构造完成之前触发的默认逻辑,错误地导致人们认为它是甚至在用户做任何事情之前就改变了)。
这在大多数情况下都有效,
- 但控制、绑定比较复杂,第三方产品对各种事件的顺序缺乏控制
- 并且,在从服务调用(即模型模型)返回的 DTO 构建视图模型之后,需要打开更改跟踪,
有没有更好的地方打开更改跟踪?
c# - 我对 IsLoaded 的理解正确吗?
这是一些代码以及我基于在 LINQPad 中玩耍的假设。谁能确认这是延迟加载的工作方式,并可能提供任何额外的见解/链接,以便我了解它在后端是如何工作的?提前致谢!
- 检索一些记录(查询数据库)。
- 检索恰好是外键属性的记录,
record
而无需使用延迟加载record.ForeignKey
来检索它(查询数据库)。 - 获取
record
实体的详细信息。 - 这是我不确定的部分。在我的测试中,它输出
true
. 我猜 IsLoaded 不知道record.ForeignKey
当前是否有一个值,但知道它record.ForeignKey
已经根据它的知识record.ForeignKeyId
和已建立的关系在上下文中被跟踪。 - db 似乎没有在这里被击中,我假设它出于同样的原因
IsLoaded
在 4 中返回 true。它知道它foreignKey
已经在跟踪对象,所以它知道它不必进行延迟加载。
编辑:我试图解决的实际问题可以这样说明:
diff - 在结构化数据文档格式中嵌入变更跟踪的策略
在设计专门的结构化数据文档格式(可能基于 XML)时:此文档格式的部分要求是它在元数据部分中容纳对字段中结构化数据的有意义(应用程序级别)更改的历史等级。
至少,有用的跟踪信息将是:
- 作者标识符
- 时间戳
- 变化类型
- 它是从什么改变的
数据项和此类数据项的任何列表都将被有意义地、有效地跟踪。数据模式应该是可分离的/不知道跟踪它的元数据 - 尽管可能需要促进注释,例如节点标识符。可能需要一个受信任的应用程序来执行跟踪;但是,能够通过比较版本之间的数据部分而不是要求编辑器实时跟踪每个更改来定期计算“增量”将是一个好处。
“有意义的”跟踪可能涉及元数据模式以原子方式处理更高级别的数据更改 - 例如对在应用程序级别被视为一个数据点的一组字段的更新。
对于逐字符或逐字节数据,差异/补丁类型算法有效。在我看来,结构化数据(被视为结构化数据)似乎需要更复杂的解决方案。
我意识到我没有非常明确的要求 - 我在这里提出问题的目的是找出这些问题在哪里被更优雅地考虑过。
在结构化数据文档格式中嵌入变更跟踪有哪些策略?
谢谢!
wcf - 从 DTO 映射到域对象后,将更改保存到 NHibernate 中的对象图
我目前正在设计的应用程序中有以下层:
MSSQL < NHibernate < 存储库 < WCF < Javascript
在加载其托管网页 (EditOrder.aspx?id=104) 时,javascript 应用程序调用 WCF 服务以通过它的 id 获取订单。用户可以使用 UI 来修改 Order 的属性并添加/修改/删除子 OrderLines(一个订单具有 OrderLines 的集合)。
当用户按下保存按钮时,javascript 应用程序将带有 OrderLine 对象的 Order 和数组作为 JSON 发布到 WCF 服务。
计划是让 WCF 服务使用 AutoMapper 在域对象和 DTO 之间进行映射。当浏览器发布的 DTO 被 WCF 服务接收到时,会映射到对应的 Order 域对象,包括其子 OrderLines。
接下来,它将被传递到存储库中。
现在我的问题是:当我要求 NHibernate 更新我的订单时,是否可以让 NHibernate 负责识别任何已删除/插入/修改的 OrderLineItems?如果是这样,让这个工作涉及什么?
更新:这是 NHibernate Merge() 方法的作用吗?
谢谢!
sql-server-2008 - 多个表的更改数据捕获
SQL Server 2008。是否可以为数据库中的多个相关表创建更改数据捕获(或更改跟踪)?例如多对多关系。
它会是什么样子?
sql-server-2008 - SSIS or Sync Framework with Change Tracking
Until now, I have worked primarily with LAMP applications, but have a project in which I need to set up two-way syncing between two SQL 2008 servers (one is web-based, the other is inside a firewall). I am finding a plethora of detailed information, but am having trouble answering some basic questions (in bold below).
As I understand it based on my reading to this point:
- Replication is an end-to-end solution that can solve many common problems but is not as flexible as other options.
- Change Tracking (SQL >= 2008) can record information about DB transactions and store the information in system tables. This information can be accessed via standard SQL queries and used in conjunction with with other tools to build a complete syncing solution.
- Sync Framework is a framework that can be used in conjunction with programming languages (and change tracking) for a complete and flexible syncing solution.
- SQL Server Integration Services (SSIS) is typically used when integrating SQL Server data with another data source. The development environment is easy to learn and fast to develop in. I believe this is also an end-to-end solution, but it can also be used in conjunction with other programming languages (creating new tasks, etc.).
Based on those understandings, here are my solutions:
I have some fairly complex logic for resolving syncing conflicts, which rules out replication (merge replication may be able to handle the logic, but it sound like the overhead would be much greater than with other solutions available in SQL 2008).
Being new to SQL Server, I really like what I have read about the ease of using SSIS, however most articles/examples I have read indicate it is primarily for integrating SQL Server with other data sources. Is SSIS an appropriate solution for syncing? I would also like to use the data recorded by 2008's Change Tracking, can I access this data through SSIS?
The other option would be using the Sync Framework and Change Tracking, which would involve a much steeper learning curve. What are the benefits of using this combination rather than SSIS and Change Tracking?
All comments on my understanding of MS syncing technologies and my solutions are appreciated.
Chris
sql-server - 存储过程 / CHANGETABLE 函数参数慢,文字快
我在 SQL2008 R2 中使用更改跟踪,并在尝试确定批处理中受影响的行时看到一个非常奇怪的行为,使用参数值时,存储的过程需要大约 30 秒才能运行,但是当我将文字值放入调用中时到它在 <1s 内返回的 CHANGETABLE 函数。
调用以下命令大约需要 30 秒:
但是,如下更改 CHANGETABLE 行,会将其减少到 ~1s。
当我们运行 SP1 时,我认为 SQL2008 CU4 中发布的 CHANGETABLE 速度较慢的补丁已修复 (http://support.microsoft.com/kb/2276330)。
我很茫然,但为什么将参数更改为文字值会产生如此大的差异?