【发布时间】:2017-04-02 12:23:24
【问题描述】:
我在 ASP.NET Core 环境中使用 EF Core。我的上下文根据请求在我的 DI 容器中注册。
我需要在上下文的SaveChanges() 或SaveChangesAsync() 之前执行额外的工作,例如验证、审核、调度通知等。其中一些工作是同步的,一些是异步的。
所以我想引发一个同步或异步事件以允许侦听器做额外的工作,阻塞直到它们完成(!),然后调用DbContext 基类来实际保存。
public class MyContext : DbContext
{
// sync: ------------------------------
// define sync event handler
public event EventHandler<EventArgs> SavingChanges;
// sync save
public override int SaveChanges(bool acceptAllChangesOnSuccess)
{
// raise event for sync handlers to do work BEFORE the save
var handler = SavingChanges;
if (handler != null)
handler(this, EventArgs.Empty);
// all work done, now save
return base.SaveChanges(acceptAllChangesOnSuccess);
}
// async: ------------------------------
// define async event handler
//public event /* ??? */ SavingChangesAsync;
// async save
public override async Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default(CancellationToken))
{
// raise event for async handlers to do work BEFORE the save (block until they are done!)
//await ???
// all work done, now save
return await base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
}
}
如您所见,SaveChanges() 很容易,但SaveChangesAsync() 该怎么做呢?
【问题讨论】:
标签: c# entity-framework asynchronous async-await entity-framework-core