2011-09-18 26 views
1

私は3層のアーキテクチャを持っています。ユーザーが[送信]ボタンをクリックしたとき。すべての値がビジネスレイヤに設定されます。ビジネスレイヤーにデータレイヤー関数が呼び出され、データベースにデータが挿入されます。私はデータベースにユニークなフィールドを持っています。そのフィールドに一意でない値を割り当てると、DataLayerで例外がスローされます。データアクセス例外を処理する方法

私は、これらのケースを処理する正しいアプローチは何かを知る必要があります。ビジネス層でそれをチェックすると、DataAccessレイヤーに一意でない値を渡すことはできません。また、Dataaccessレイヤーから例外を処理する必要があります。そのような種類の例外を処理し、ビジネスメッセージをユーザーに表示する方法を教えてください。

I Error No

答えて

0
  • のような様々なアプローチあなたのデータ層は、ビジネス層は、この例外をキャッチし、その後に優しいエラーメッセージを表示する必要があり、SQL例外をキャッチし、
  • 重複するエンティティのためのカスタム例外を再スローする必要がありエントリが重複しているというユーザ

編集:SQL例外が重複エントリのものであることを検出するには、Entity Framework: How to properly handle exceptions that occur due to SQL constraints nd Unique Key Violation in SQL Server - Is it safe to assume Error 2627?

+0

datalayerで、これは重複したエントリの例外またはその他の問題であることをどのように知るでしょうか。 –

+0

http://stackoverflow.com/questions/6483699/error-2627-in-sql-server-is-it-safe-to-assume –

+0

http://stackoverflow.com/questions/3694359/entity-framework-how正しく処理される例外、つまりSQLの制約により発生する例外 –

-1

IMHOこれらの例外を常に中継する必要があります。彼らはまさにその理由のためにそこにいます。フィールドの一意性を自分で調べなければならない場合、ユニークな属性のポイントは何ですか?あなたの質問の第二部分のために。ユーザーは一意のデータを提供する責任を負いません。したがって、データアクセス層が一意性の競合を解決しなければならないという情報は、ユーザーに提示されるべきではありません。率直に言って、私はあなたがあなたのデータアクセス層でバックグラウンドで生成できなかったデータベース全体のユニークな値をユーザに提供する必要がある状況を考えることはできません。例外の処理方法については、データの性質に依存していると思います。可能であれば、私は競合する新しい入力を削除するか、データをマージします。

システムに関する詳細は何ですか?

+0

-1想像力を向上させる必要があります。ユーザー名は、データベースで一意でなければならないユーザーからよく聞かれる値であり、システムは登録時に自分自身を決定できません。 –

0

テーブルに一意の値を挿入する場合は、データベースに挿入する前に一意性をチェックするとよいでしょう。もしそれがウェブアプリなら。最初に一意性をチェックするために、JQueryAJAXの組み合わせを使用できます。 Webサービスがここで役立つか、.aspx.csファイル内の単純なWebメソッドは、Jqueryによって呼び出され、ajaxを使用して呼び出されます。入力が一意でない場合は、ユーザーフレンドリーなメッセージを送信してください