EntityFramework知道何时被物化

本文关键字:何时 EntityFramework | 更新日期: 2023-09-27 18:09:25

我意识到有一个事件ObjectMaterialized with在对象物化后在ObjectContext上被调用。

是否有一种方法可以知道当一个对象当前被物化?

对象可以通过从数据库中刷新来重新物化。所以我不能简单地在我的类中有一个标志来指示我是否已经被物化了,因为它可能会再次发生。

基本上,当某些属性被设置时,我想知道它们是否被设置为来自数据库的新值(即,当被具体化时),或者如果应用程序从其他地方调用它们。

EntityFramework知道何时被物化

如果我正确阅读文档,则ObjectMaterialized事件仅在创建实体对象时触发一次,然后通过查询或加载操作从数据库加载。

你可以用ObjectStateManager来跟踪对象的变化,但我不知道它是否能帮助你找到变化的来源。

正如@BigL的回答所指出的,当实体刷新时,此事件不会再次触发。物质化意味着创建一个实例,这只会发生一次。刷新仅更新现有实例中的值并设置实体状态。

你总是知道属性是通过刷新来设置的,因为你必须在指定的实体实例上自己触发这个操作,这样你就可以控制当属性被设置时你需要打开或关闭你的逻辑的任何标志。