EF Code First: Где я могу найти событие SavingChanges? - PullRequest
11 голосов
/ 22 октября 2011

ОК, это может быть вопрос новичка, но как / где я могу подписаться на событие ObjectContext.SavingChanges, как упомянуто, например, в этом сообщении .

У меня только двасоответствующие классы в моем демонстрационном приложении: класс "Country" и класс, который содержит "определения" EF Code First:

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

Любая подсказка высоко ценится.

Ответы [ 3 ]

10 голосов
/ 22 октября 2011

Вы должны быть в состоянии сделать это:

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; }  
}  
2 голосов
/ 22 октября 2011

Из того, что я вижу в MSDN, DbContext оборачивает экземпляр ObjectContext как фасад, не подвергая это конкретное событие.

Однако DbContext имеет перегрузку конструктора , который принимает ObjectContext - вы можете использовать его для передачи ObjectContext и подписки на событие SavingChanges.

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

  }
}
0 голосов
/ 04 июня 2015

Другим способом может быть, например:

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
...