有没有办法知道实体何时被初始化?

时间:2010-11-07 19:50:18

标签: entity-framework entity-framework-4

有没有办法知道实体何时被初始化?如果实体框架支持ISupportInitialize接口,那将是很好的,但它似乎没有。

基本上我要做的是在更新某个其他属性时更新LastModified属性。但是,只要设置了属性,就会调用OnXxxChanged函数,包括初始化对象的时间。

2 个答案:

答案 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事件