有谁知道如何覆盖SaveChangesAsync?我知道发布了类似的问题,但没有答案。我在下面有以下代码:
public override async Task<int> SaveChangesAsync()
{
PerformFurtherValidations();
return await base.SaveChangesAsync();
}
在构建期间,我收到以下错误消息:
错误SaveChangesAsync():返回类型必须是
System.Threading.Tasks.Task<int>
匹配被覆盖的成员System.Data.Entity.DbContext.SaveChangesAsync()
答案 0 :(得分:5)
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))
{
return (await base.SaveChangesAsync(true, cancellationToken));
}
答案 1 :(得分:3)
老问题,但我遇到了类似的问题并使用以下代码解决了这个问题:
public override async Task<int> SaveChangesAsync()
{
foreach (var history in this.ChangeTracker.Entries()
.Where(e => e.Entity is IModificationHistory && (e.State == EntityState.Added ||
e.State == EntityState.Modified))
.Select(e => e.Entity as IModificationHistory)
)
{
history.DateModified = DateTime.Now;
if (history.DateCreated <= DateTime.MinValue)
{
history.DateCreated = DateTime.Now;
}
}
int result = await base.SaveChangesAsync();
foreach (var history in this.ChangeTracker.Entries()
.Where(e => e.Entity is IModificationHistory)
.Select(e => e.Entity as IModificationHistory))
{
history.IsDirty = false;
}
return result;
}
自定义SaveChangesAsync()允许我调整脏标志,创建日期和修改日期。
答案 2 :(得分:0)
最好将任务返回给调用者,您无需在SaveChanges版本中调用异步方法,只需省略“ await”和“ async”关键字即可。
public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default)
{
PerformFurtherValidations();
return base.SaveChangesAsync();
}
答案 3 :(得分:0)
我遇到了同样的问题,根本原因是该项目的 EntityFramework 引用来自
<块引用>\packages\EntityFramework.6.3.0\lib\net40
文件夹代替
<块引用>\packages\EntityFramework.6.3.0\lib\net45