好的,这可能是一个新手问题,但我如何/在哪里可以订阅ObjectContext.SavingChanges事件,如本post中所述。
我的演示应用程序中只有两个相关的类:“Country”类和一个包含EF Code First“定义”的类:
internal class TestDb : DbContext
{
public DbSet<Country> Countries { get; set; }
}
任何提示都受到高度赞赏。
答案 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上看到的内容,DbContext
将ObjectContext
的实例包装为外观,而不是暴露此特定事件。
但是,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