2015-06-22 55 views
0

我正在使用EF6.1,並且我想在下面的異常拋出時將消息更改爲更系統特定的消息。在EF6中捕捉併發異常以更改消息,以使用戶更加友好

商店更新,插入或刪除語句影響行的意外數字(0)

現在,我的問題是,我似乎無法捕獲異常?我已經嘗試了以下,但我的斷點似乎從來沒有趕上

public override System.Threading.Tasks.Task<int> SaveChangesAsync() 
{ 
    try 
    { 
     return base.SaveChangesAsync(); 
    } 
    catch (System.Data.Entity.Core.OptimisticConcurrencyException e) 
    { 
     var a = e.Message; 
    } 
    catch (System.Data.DBConcurrencyException e) 
    { 
     var a = e.Message; 
    } 
    catch (Exception e) 
    { 
     var a = e.Message; 
    } 

    return null; 
} 

它是不是一個例外被拋出??這很奇怪

+0

你不尊重「分離關注」原則。 – Alireza

+0

分離擔憂? – Gillardo

+0

「拋出異常以通知主叫方發生了什麼不良」與「向用戶報告錯誤」完全不同。這被稱爲SoC。 – Alireza

回答

2

您正在執行異步方法。這意味着,當你調用await對返回的任務,或者當您嘗試使用await myTask;

檢索結果你永遠不會這麼做,這意味着拋出異常,並且抓住了上漲調用棧的任何異常將被拋出。

如果你想捕獲異常你自己的方法,你應該它的語法改變

public override async System.Threading.Tasks.Task<int> SaveChangesAsync() 
{ 
    try 
    { 
     return await base.SaveChangesAsync(); 
    } 

我會非常謹慎覆蓋SaveChangesAsync時雖然。 OptimisticConcurrencyException異常包含在其StateEntries屬性中導致樂觀衝突的數據。用一個漂亮的信息替換它只會讓決定如何處理特定錯誤更困難,例如決定覆蓋或重新加載。

顯示一條好消息是最好留給你的控制器的東西。

+0

謝謝。接受建議,並將其添加到控制器。再次感謝 – Gillardo