質問

ユーザーテーブルがあります。これには、ユーザー名に一意の制約があります(明らかな理由で)。

EF 4.0 DALを使用してデータベースを入力し、CreateUSER()メソッドをコーディングしています。

それは...ですか...

  1. すでに存在するユーザー名を挿入しようとする場合、スローされたsqlexceptionをキャッチするのが最善です。
  2. データベースに挿入しようとする前に、ユーザー名を明示的に確認しますか?

理由についても理由を与えることができれば、それは素晴らしいことです!

役に立ちましたか?

解決

レコードが最初に存在するかどうかを確認します。ユニークなキーの制約は、アプリケーションが最初に「悪い」データを許可する可能性のある方法を防ぐのに役立ちますが、そのためのメインストップではありません。通常、例外を避けることができる場合は、例外を制御フローメカニズム(この場合の検証)として使用することは悪い考えです。

編集:混乱を避けるために、私は一意のインデックスがまったくないと言っているわけではありません。それはそこにあるべきですが、それは一意性をチェックする主な手段ではないはずです。

他のヒント

例外を処理することが最善だと思います。データベースは、ユーザー名の独自性を処理するように設計されているため、できるよりも効率的に行うことができると思います。また、システムに携帯性と結束を追加します。ユーザーを複数の場所に追加すると、ユーザー名のチェックを複製するか、メソッドを作成する必要があります。基本的には、データベースエンジンが既に作成したものを書き直すことになります。

サミュエルが言ったことに加えて、あなたの小切手とデータベースにレコードを追加することとの間であなたのレコードと競合するレコードを誰も入力しないことを確認する必要があります。ロックでこれを達成できますが、ロックによって引き起こされた例外をキャッチする必要があります。

ビジネスルールとデータベースのものを複製することに関しては、たとえこれがビジネス層のいくつかのものを複製していても、必要な限り多くのコンシデンシーチェックを行うデータベースに賛成しています。データベースがよりタイトにロックされているほど、無効なデータに反しています。 SSMを使用してデータベースを変更してユーザーによって報告されたデータの問題を修正するサポートマンなど、アプリ以外のツールを介してデータベースへのアクセスから保護します。

私はサミュエルが言ったことを第二に。最も効率的な方法は、データベースに任せることです。他のすべてのオプションは、より多くの時間とリソースの消費です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top