2015-03-25 63 views
1

我試圖通過增加另一個功能(以便審計)重寫上下文來實現MVC項目的審計線索。 SaveChanges的重寫工作正常,但是我遇到的問題是使用SaveChangesAsync。 這裏是部分從上下文覆蓋SaveChangesAsync

public override Task<int> SaveChangesAsync() 
    { 
     throw new InvalidOperationException("User ID must be provided"); 
    } 


    public override int SaveChanges() 
    { 
     throw new InvalidOperationException("User ID must be provided"); 
    } 


    public async Task<int> SaveChangesAsync(int userId) 
    { 
     DecidSaveChanges(userId); 
     return await this.SaveChangesAsync(CancellationToken.None); 
    } 


    public int SaveChanges(int userId) 
    { 
     DecidSaveChanges(userId); 
     return base.SaveChanges(); 
    } 

代碼我的問題是與我的控制器

await db.SaveChangesAsync(1); 

1爲一個虛擬用戶。我收到以下錯誤。

Error 1 The 'await' operator can only be used within an async method. Consider marking this method with the 'async' modifier and changing its return type to 'Task<System.Web.Mvc.ActionResult>'. 

你知道我在做什麼錯嗎?以及如何解決它?我正在使用EF6和MVC5

回答

4

你知道我在做什麼錯嗎?

是的,就看你的編譯器錯誤消息:

The 'await' operator can only be used within an async method. 

因此,控制器動作(包含呼叫SaveChangesAsync(1))需要async

以及如何解決它?

是的,就看你的編譯器錯誤消息:

Consider marking this method with the 'async' modifier and changing its return type to 'Task<System.Web.Mvc.ActionResult>'. 

所以,你修復它通過使控制器動作async並改變它的返回類型從ActionResultTask<ActionResult>