代码之家  ›  专栏  ›  技术社区  ›  skolima

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

  •  1
  • skolima  · 技术社区  · 14 年前

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

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

    2 回复  |  直到 14 年前
        1
  •  2
  •   Morteza Manavi    14 年前

    实际上,它们不是因为“对象初始化”而被调用的,而是因为 对象物化 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 在哪里? 马蒂厄·梅齐尔 提出了读取堆栈跟踪的解决方案。

        2
  •  1
  •   Poker Villain    14 年前

    您可以使用ObjectContext的ObjectMaterialized事件