EF Code First: Где я могу найти событие SavingChanges?
ОК, это может быть вопрос новичков, но как/где я могу подписаться на событие ObjectContext.SavingChanges, как упомянуто, например, в этом сообщении .
В моем демонстрационном приложении есть только два соответствующих класса: класс "Страна" и класс, который содержит "определения" EF Code:
internal class TestDb : DbContext
{
public DbSet<Country> Countries { get; set; }
}
Любые намеки приветствуются.
Ответы
Ответ 1
Вы должны иметь возможность сделать это:
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
Из того, что я могу видеть в MSDN, DbContext
завершает экземпляр ObjectContext
как фасад, не подвергая этому конкретному событию.
Однако DbContext
имеет конструктор перегрузки, который принимает ObjectContext
- вы можете использовать это для передачи в ObjectContext
и подписаться на событие SavingChanges
на нем.
using(ObjectContext context = new ObjectContext(myConnectionString))
{
using(DbContext dbContext = new DbContext(context, true))
{
}
}
Ответ 3
Другой способ может быть, например:
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