2011-12-29 6 views
0

私は電子メールが2回入力された例外をキャッチしようとしています。電子メールが一意であるため例外をキャッチしなければなりません。私は、例外をキャッチするには、次のコードを持っている:メソッドがカスタム例外に入力しないのはなぜですか?

カスタム例外クラスが

:例外がcatchedことになっている

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」で例外をキャッチしようとしません。これは、デプリーネストされたEF/SqlServer例外ツリーでこのエラーを正確に見つけるのが面倒になる可能性があるからです。私は提出しようとする前に、データベースに入力された電子メールアドレスを照会します。 – Jan

+0

あなたが私の答えに書いたものに基づいて "例外はsqlexceptionです。私はsqlexceptionからカスタム例外クラスを拡張する必要があります.." - この質問は同じ質問をしていません。あなたが例外を拡張する方法を知りたければ、それを求めているはずです。明らかにこの質問では、あなたが求めているのは、部分的に提供されたコードが機能しない理由です。 –

答えて

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

+0

はい私はJanと同意しますが、とにかくありがとうございます – user1114676

+0

はい、if文を追加する必要があります。 –

関連する問題