B Z*_*B Z 8 entity-framework ef-code-first entity-framework-4.1
EF 4.1 RC.我想在实体添加/附加到DBContext后运行一些代码.是否有事件(我找不到).基本上我想检查添加/附加的实体是否属于某个界面,如果是,请用它做一些事情.谢谢!
小智 19
要跟踪对Context的更改,您可以使用该ObjectStateManagerChanged
事件ObjectStateManager
.要访问ObjectStateManager
,你必须使用IObjectContextAdapter
像转换DbContext一样
var contextAdapter = ((IObjectContextAdapter)dbcontext);
contextAdapter.ObjectContext
.ObjectStateManager
.ObjectStateManagerChanged += ObjectStateManagerChanged;
Run Code Online (Sandbox Code Playgroud)
一旦你收到了这个事件,它就会在每次收集变化时通过添加或删除实体来触发ObjectStateManager
.为了跟踪实体,使用状态GetObjectStateEntry()
的ObjectStateManager
,并使用Element
了的CollectionChangeEventArgs
PARAM.
结合这两个州CollectionChangeEventArgs
和ObjectStateEntry
您可以跟踪,这是怎么回事....
Lad*_*nka 11
不幸的是,没有这样的事件可用,并且没有扩展点来添加此类事件.这是我最大的EF失败之一.可扩展性=零.
您唯一能做的就是覆盖SaveChanges
并在执行base.SaveChanges
use 之前ChangeTracker
获取所有类型的附加和添加实体并执行您的逻辑.但它与将事件附加或添加到上下文时触发事件不同.
处理相关DbSet的Local属性(ObservableCollection)的CollectionChanged事件。
分别检查添加/附加实体对象的DbEntityEntry的状态是否已添加或未修改。
DbSet.Local属性:http : //msdn.microsoft.com/zh-cn/library/gg696248( v=vs.103) .aspx
DbContext.Entry方法:http : //msdn.microsoft.com/zh-cn/library/gg696578( v=vs.103) .aspx