9

EF 4.1 钢筋混凝土。在将实体添加/附加到 DBContext 后,我​​想运行一些代码。有没有这方面的活动(我找不到)。基本上我想检查添加/附加的实体是否属于某个接口,如果是,用它做一些事情。谢谢!

4

3 回答 3

22

要跟踪对 Context 的更改,您可以ObjectStateManagerChanged使用ObjectStateManager. 要访问ObjectStateManager,您必须使用IObjectContextAdapter来转换 DbContext ,例如

var contextAdapter = ((IObjectContextAdapter)dbcontext);            
contextAdapter.ObjectContext
              .ObjectStateManager
              .ObjectStateManagerChanged += ObjectStateManagerChanged;

获得事件后,每次通过向ObjectStateManager. 要跟踪实体的状态,请使用参数GetObjectStateEntry()ObjectStateManager和。ElementCollectionChangeEventArgs

结合这两种状态,CollectionChangeEventArgsObjectStateEntry可以跟踪正在发生的事情......

于 2011-09-13T21:52:34.813 回答
12

不幸的是,没有可用的此类事件,也没有添加此类事件的扩展点。在我看来,这是最大的 EF 失败之一。可扩展性 = 零。

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

于 2011-03-23T19:00:27.053 回答
5

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

于 2012-06-18T15:18:48.030 回答