2014-09-23 16 views
1

有誰知道如何覆蓋SaveChangesAsync?我知道發佈了類似的問題,但沒有答案。下面我有以下代碼:忽略SaveChangesAsync

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

在生成過程中我得到了以下錯誤消息:

錯誤SaveChangesAsync():返回類型必須是 System.Threading.Tasks.Task<int>匹配重寫的成員 System.Data.Entity.DbContext.SaveChangesAsync()

+1

我剛剛使用EF 6.1.1編譯相同的代碼,並沒有得到任何生成錯誤。你正在使用哪個版本? – 2014-09-23 17:38:40

+2

@YuvalItzchakov我正在使用與您的EF版本相同的版本。花了3.5小時試圖解決它。最後,我所要做的只是關閉VS2013,重新啓動它,瞧,它的工作原理! – DannyT 2014-09-24 08:33:17

回答

0

舊的問題,但我有一個類似的問題,並解決它與以下代碼:

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()允許我調整髒標誌,創建日期和修改日期。

0
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken)) 
{ 
    return (await base.SaveChangesAsync(true, cancellationToken)); 
} 
+0

在這種情況下,您不應該等待基本操作,而只是在不等待它的情況下返回任務。從UI線程調用並等待結果時,這可能會導致死鎖。 – Matyas 2018-03-09 14:47:42

+1

請提供一些關於解決方案的解釋,而不僅僅是代碼傾銷 – LordWilmore 2018-03-09 15:38:35