覆盖SaveChangesAsync

时间:2014-09-23 17:25:50

标签: c# asp.net entity-framework

有谁知道如何覆盖SaveChangesAsync?我知道发布了类似的问题,但没有答案。我在下面有以下代码:

public override async Task<int> SaveChangesAsync()
{
    PerformFurtherValidations();
    return await base.SaveChangesAsync();
}

在构建期间,我收到以下错误消息:

  

错误SaveChangesAsync():返回类型必须是   System.Threading.Tasks.Task<int>匹配被覆盖的成员   System.Data.Entity.DbContext.SaveChangesAsync()

4 个答案:

答案 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