DBContext添加/附加事件?

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了的CollectionChangeEventArgsPARAM.

结合这两个州CollectionChangeEventArgsObjectStateEntry您可以跟踪,这是怎么回事....


Lad*_*nka 11

不幸的是,没有这样的事件可用,并且没有扩展点来添加此类事件.这是我最大的EF失败之一.可扩展性=零.

您唯一能做的就是覆盖SaveChanges并在执行base.SaveChangesuse 之前ChangeTracker获取所有类型的附加和添加实体并执行您的逻辑.但它与将事件附加或添加到上下文时触发事件不同.


Moh*_*oho 5

处理相关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