所以我要做的是一个事件源,它侦听SaveChanges事件的给定上下文,然后获取所有更改的条目并推出这些条目的已更改属性。
E.g。
public class ContextChangeListener {
public event EventHandler<ContextChangeEvent> ContextChanges;
private ObjectContext _context;
public ContextChangeListener(ObjectContext context) {
_context = context;
_context.SavingChanges += OnSavingChanges;
}
protected virtual void OnSavingChanges(object source, EventArgs evt) {
var handler = ContextChanges;
if (handler == null) {
return;
}
var changedEntries =
_context.ObjectStateManager.GetObjectStateEntries(
EntityState.Added | EntityState.Deleted | EntityState.Modified);
foreach (var changedEntry in changedEntries) {
handler.Invoke(this, new ContextChangeEvent(changedEntry));
}
}
}
我现在想知道的是,我说我得到的状态已添加。可能存在他们的PK尚未生成的情况。是否可以侦听保存更改后发送的事件。
如果这不可能,那么是否可以强制EF从OnSavingChanges方法提交更改?
答案 0 :(得分:1)
您可以从ObjectContext继承并实现IObjectContext,然后包装SaveChanges方法:
public class MyContext : ObjectContext, IObjectContext
{
public event EventHandler ContextSaved;
public void SaveChanges()
{
base.SaveChanges();
if (ContextSaved != null)
ContextSaved.Invoke(this, null);
}
public void Dispose()
{
base.Dispose();
}
public IRepository<T> GetRepository<T>() where T : class
{
throw new NotImplementedException();
}
}