EF Code First:我在哪里可以找到SavingChanges事件?

时间:2011-10-22 18:28:19

标签: c# .net entity-framework entity-framework-4 entity-framework-4.1

好的,这可能是一个新手问题,但我如何/在哪里可以订阅ObjectContext.SavingChanges事件,如本post中所述。

我的演示应用程序中只有两个相关的类:“Country”类和一个包含EF Code First“定义”的类:

internal class TestDb : DbContext
{
    public DbSet<Country> Countries { get; set; }       
}

任何提示都受到高度赞赏。

3 个答案:

答案 0 :(得分:10)

你应该可以这样做:

internal class TestDb : DbContext  
{  
    public void SetSavingChanges(EventHandler evt) 
    {
            var oc = this as IObjectContextAdapter;
            oc.ObjectContext.SavingChanges -= evt;
            oc.ObjectContext.SavingChanges += evt;
    }

    public DbSet<Country> Countries { get; set; }  
}  

答案 1 :(得分:2)

从我在MSDN上看到的内容,DbContextObjectContext的实例包装为外观,而不是暴露此特定事件。

但是,DbContext确实有一个constructor overload,需要ObjectContext - 您可以使用它来传递ObjectContext并订阅SavingChanges事件在它上面。

using(ObjectContext context = new ObjectContext(myConnectionString))
{
  using(DbContext dbContext = new DbContext(context, true))
  {

  }
}

答案 2 :(得分:0)

另一种方式可能是,例如:

Public Class MainForm

  Private WithEvents myObjectContext As ObjectContext
  Private myDbContext As DbContext

...

  Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles Me.Load
    myDbContext = New DbContext
    myObjectContext = CType(myDbContext, IObjectContextAdapter).ObjectContext

...


  Private Sub ObjectContextSavingChanges(sender As Object, e As EventArgs) Handles myObjectContext.SavingChanges

    'Your code hear

  End Sub