好吧,这可能是一个新手问题,但我如何/在哪里可以订阅ObjectContext.SavingChanges事件,例如在此提到 岗位。
我的演示应用程序中只有两个相关的类:“Country”类和一个包含EF Code First“定义”的类:
internal class TestDb : DbContext
{
public DbSet<Country> Countries { get; set; }
}
任何提示都受到高度赞赏。
好吧,这可能是一个新手问题,但我如何/在哪里可以订阅ObjectContext.SavingChanges事件,例如在此提到 岗位。
我的演示应用程序中只有两个相关的类:“Country”类和一个包含EF Code First“定义”的类:
internal class TestDb : DbContext
{
public DbSet<Country> Countries { get; set; }
}
任何提示都受到高度赞赏。
你应该能够做到这一点:
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; }
}
你应该能够做到这一点:
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; }
}
从我在MSDN上看到的, DbContext
包装一个实例 ObjectContext
作为一个门面,不暴露这个特定的事件。
然而, DbContext
确实有 构造函数重载 需要一个 ObjectContext
- 你可以使用它来传递 ObjectContext
并订阅 SavingChanges
事件就可以了。
using(ObjectContext context = new ObjectContext(myConnectionString))
{
using(DbContext dbContext = new DbContext(context, true))
{
}
}
另一种方式可能是,例如:
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