EF 4.1 RC。我想在实体添加/附加到DBContext后运行一些代码。是否有事件(我找不到)。基本上我想检查添加/附加的实体是否属于某个界面,如果是,请用它做一些事情。 谢谢!
答案 0 :(得分:19)
要跟踪对上下文的更改,您可以使用ObjectStateManagerChanged
的{{1}}事件。要访问ObjectStateManager
,您必须使用ObjectStateManager
来投射DbContext,例如
IObjectContextAdapter
获得该事件后,每次通过向var contextAdapter = ((IObjectContextAdapter)dbcontext);
contextAdapter.ObjectContext
.ObjectStateManager
.ObjectStateManagerChanged += ObjectStateManagerChanged;
添加或删除实体来更改集合时都会触发该事件。
要跟踪实体的状态,请使用ObjectStateManager
的{{1}}并使用GetObjectStateEntry()
参数的ObjectStateManager
。
结合Element
和CollectionChangeEventArgs
的两种状态,您可以跟踪,发生了什么......
答案 1 :(得分:11)
不幸的是,没有可用的此类事件,并且没有可添加此类事件的扩展点。这是我最大的EF失败之一。可扩展性=零。
您唯一能做的就是覆盖SaveChanges
,然后在执行base.SaveChanges
之前使用ChangeTracker
获取您所有类型的附加和添加实体并执行您的逻辑。但它与在上下文中附加或添加实体时触发事件不同。
答案 2 :(得分:4)
处理相关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