2011-12-29 68 views
0

我想抓住一個例外,電子郵件輸入兩次,它必須趕上例外,因爲電子郵件是唯一的。我有以下代碼捕獲異常:爲什麼方法不在自定義異常中輸入?

自定義異常類:

public class EmailAlreadyExistsException : Exception 
{ 
    public EmailAlreadyExistsException(string message) : base(message) { } 
} 

當異常應該被逮住:

public void UpdateUser(Customer customer) 
{ 
    try 
    { 
     this.Entities.SaveChanges(); 
    } 
    catch (CommonLayer.exceptions.EmailAlreadyExistsException ex) 
    { 
     throw ex; 
    }    
} 
+2

我不會嘗試在'SaveChanges'處捕獲異常,因爲在depply嵌套的EF/SqlServer異常樹中發現這個錯誤確實很麻煩。在嘗試提交之前,我會在數據庫中查詢輸入的電子郵件地址。 – Jan 2011-12-29 21:55:38

+0

根據你在下面給我的答案寫的內容「sqlexception的例外,我需要擴展自sqlexception自定義excigra類..」這個問題帖子沒有問同一個問題。如果你想知道如何擴展異常,那麼你應該問這個問題。很明顯,在這個問題中,你所要問的是爲什麼我的代碼不能正常工作。 – 2013-08-09 14:40:19

回答

0

晚安,發生異常而不是自定義異常(EmailAlreadyExistsException)所以你的catch(CommonLayer.exceptions.EmailAlreadyExistsException ex)沒有緩存並繼續,請試試這個:

public void UpdateUser(Customer customer) 
{ 
    try 
    { 
     this.Entities.SaveChanges(); 
    } 
    catch (Exception ex) 
    { 
     if(ex.Message.Contains("EmailAlreadyExistsConstraint"))//custom if 
      throw new CommonLayer.exceptions.EmailAlreadyExistsException(ex.Message); 
     else 
      throw ex; 
    } 
} 
+0

這會將每個異常轉換爲EmailAlreadyExistsException。這可能不是正確的方法。 – Jan 2011-12-29 21:53:44

+0

我同意Jan,但無論如何謝謝 – user1114676 2011-12-29 21:56:11

+0

是的,必須添加一個if語句。 – 2011-12-29 21:57:37

相關問題