有没有办法知道实体何时被初始化?如果实体框架支持ISupportInitialize接口,那将是很好的,但它似乎没有。
基本上我要做的是在更新某个其他属性时更新LastModified属性。但是,只要设置了属性,就会调用OnXxxChanged函数,包括初始化对象的时间。
答案 0 :(得分:2)
实际上,由于您的“对象初始化”,它们不会被调用,而是因为 对象实现 。你必须意识到:
PropertyChanged和PropertyChanging事件和方法在对象实现期间触发 。
原因是因为这两个方法在该属性的setter主体中调用,EF每次实现一个对象时都会调用属性setter。
遗憾的是,没有内置的方法来辨别您是否正在实现对象的实现过程,或者您确实在实现之后更改了值。
一种解决方法是在类中设置一个默认设置为true的布尔字段,然后在PropertyChanged / PropertyChanging事件中检查其值,并在实现阶段将其设置为false。这样的事情可以解决问题:
partial class Product {
bool _isMaterialized = true;
partial void OnProductNameChanged() {
if (_isMaterialized) {
_isMaterialized = false;
return;
}
this.ModifiedDate = DateTime.Now;
}
}
您可以通过以下链接找到其他解决方法:
Property-Changed during ObjectMaterialization其中 Matthieu Mezil 提出了一个读取堆栈跟踪的解决方案。
答案 1 :(得分:1)
您可以使用ObjectContext的ObjectMaterialized事件