STE ChangeTracker.OriginalValues始终为空

时间:2011-09-16 23:08:57

标签: c# entity-framework self-tracking-entities change-tracking

我无法从我的EF STE DTO获取OriginalValues。

var _Item = new MyClass();
_Item.StartTracking();    // ChangeTracker.OriginalValues.Count = 0
_Item.Name = "Jerry";     // ChangeTracker.OriginalValues.Count = 0
_Item.Name = "Bob";       // ChangeTracker.OriginalValues.Count = 0
_Item.AcceptChanges();    // ChangeTracker.OriginalValues.Count = 0
_Item.Name = "Sam";       // ChangeTracker.OriginalValues.Count = 0

我做错了吗?

由于

1 个答案:

答案 0 :(得分:0)

整个ChangeTracker是您应用程序的一部分 - 它是由STE T4模板生成的类,因此您可以轻松跟踪OriginalValues应该执行的操作。

如果您修改被跟踪实体的导航属性,

OriginalValues用于存储原始加载的外键和相关实体。它们不用于常见属性,但您可以根据需要修改模板,也可以使用更改跟踪器来获取这些属性。

编辑:

您不会获得公共属性的原始值,因为它没有存储(因为我理解模板)。它在SQL事件探查器中也可见。如果您更改具有50个属性的实体中的单个标量属性并将更改应用于新上下文,则它将使用所有50个属性创建更新(附加实体上的标准更改跟踪将仅传递该已修改的属性)。

如果您想了解公共财产的原始价值,您必须修改模板以支持此类功能。