DBContext添加/附加事件?

时间:2011-03-23 15:44:01

标签: entity-framework ef-code-first entity-framework-4.1

EF 4.1 RC。我想在实体添加/附加到DBContext后运行一些代码。是否有事件(我找不到)。基本上我想检查添加/附加的实体是否属于某个界面,如果是,请用它做一些事情。 谢谢!

3 个答案:

答案 0 :(得分:19)

要跟踪对上下文的更改,您可以使用ObjectStateManagerChanged的{​​{1}}事件。要访问ObjectStateManager,您必须使用ObjectStateManager来投射DbContext,例如

IObjectContextAdapter

获得该事件后,每次通过向var contextAdapter = ((IObjectContextAdapter)dbcontext); contextAdapter.ObjectContext .ObjectStateManager .ObjectStateManagerChanged += ObjectStateManagerChanged; 添加或删除实体来更改集合时都会触发该事件。 要跟踪实体的状态,请使用ObjectStateManager的{​​{1}}并使用GetObjectStateEntry()参数的ObjectStateManager

结合ElementCollectionChangeEventArgs的两种状态,您可以跟踪,发生了什么......

答案 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