EF 4.1 钢筋混凝土。在将实体添加/附加到 DBContext 后,我想运行一些代码。有没有这方面的活动(我找不到)。基本上我想检查添加/附加的实体是否属于某个接口,如果是,用它做一些事情。谢谢!
3 回答
要跟踪对 Context 的更改,您可以ObjectStateManagerChanged
使用ObjectStateManager
. 要访问ObjectStateManager
,您必须使用IObjectContextAdapter
来转换 DbContext ,例如
var contextAdapter = ((IObjectContextAdapter)dbcontext);
contextAdapter.ObjectContext
.ObjectStateManager
.ObjectStateManagerChanged += ObjectStateManagerChanged;
获得事件后,每次通过向ObjectStateManager
. 要跟踪实体的状态,请使用参数GetObjectStateEntry()
的ObjectStateManager
和。Element
CollectionChangeEventArgs
结合这两种状态,CollectionChangeEventArgs
您ObjectStateEntry
可以跟踪正在发生的事情......
不幸的是,没有可用的此类事件,也没有添加此类事件的扩展点。在我看来,这是最大的 EF 失败之一。可扩展性 = 零。
您唯一能做的就是SaveChanges
在执行之前重写base.SaveChanges
useChangeTracker
以获取您类型的所有附加和添加的实体并执行您的逻辑。但这与将实体附加或添加到上下文时触发事件不同。
处理相关 DbSet 的 Local 属性 (ObservableCollection) 的 CollectionChanged 事件。
分别检查添加/附加的实体对象的 DbEntityEntry 状态是否已添加或未修改以添加/附加。
DbSet.Local 属性: http: //msdn.microsoft.com/en-us/library/gg696248 (v=vs.103).aspx
DbContext.Entry 方法: http: //msdn.microsoft.com/en-us/library/gg696578 (v=vs.103).aspx