ASP.NET MVCで生成されたDBContextを使用してEF 4.0モデルを検証する方法は?
-
22-10-2019 - |
質問
わかりました 私はまだEF 4.0のスキーマモデルを使用したいと思っています。 ただし、EF 4.1のAPIと柔軟性も必要です。
そのため、アプリケーションでは、現在のEF 4.0モデルからDBContext生成コードを追加しました。
さて、私の質問は、DBSET(EF 4.1)モデルを拭かないでください。
Data Annotationは、視覚モデルを更新するたびに、すべての変更を完了するため、それをカットしていないようです。
- 私は部分的なクラスについて聞いたことがありますが、それは本当に厄介なようです。
- 私は本当に自分のコントローラーで検証をしたくありません。
- クラスをASP.NET MVCからWPFなどに簡単に転送できるように、これをスケーラブルにしたいです。
これを行う方法はありますか?検証リポジトリ?分離検証層?リポジトリレイヤー内の検証?例も大歓迎です。
私を助けてください。ありがとう :)
解決
テンプレートジェネレーターを使用すると、次のいずれかを実行することが可能です。
- 各エンティティのバディクラスを作成し、テンプレートでコンベンションを命名してバディクラスを定義します。
- それらを別のソースなどに保存することにより、データアノテーションを作成する方法を把握します。
または、別のレイヤーを使用します。リポジトリを使用している場合は、そこに検証を埋め込むことができます。私は、エンティティ(静的または動的に)と一致するルールを引き込むORM検証工場を用意することを選択しました。工場は作業を行います(それは特異な責任の原則の方針に沿っているからです)。
Hth。
他のヒント
私のプロジェクトでは、4.1と4.0の両方のコンテキストをミックスします。遅い移行を行うことができます。また、Visual Studioに追加できるエンティティフレームワーク4.1リバースエンジニア拡張機能もあります。 (既存のデータベースからPOCOオブジェクト +マッピングを生成するコードで4.1を使用できるようにします)。
EDMX生成モデルを4.0から公開するDBContextを作成することはお勧めしません。また、ObjectContext/DBContextを継承し、プロパティを継承する(行バージョン、ECT)、POCOオブジェクトの制御の利点(4.0のように部分的なメタデータタイプ属性を心配する必要がないため)
EF4.0で作成されたスキーマの検証に関する質問:
モデルを更新するときにデータアノテーションが完全に拭かれないようにするため、メタデータ型属性を使用する必要があります。
これには例があります
なぜMSがプログラマーにそのような悪い慣行を教えているのかわかりません。特に、EF 4.1でマッピングするためのデータアノテーションを使用することは、本当に愚かな設計決定でした(たとえば、Mappingと検証を明確に分離するために設定されたLinq-to-SQLを使用して設定されました)。
データアノテーションは、ユーザー入力からのデータを検証するために使用され、ユーザー入力はビュー /コントローラー関連のものです。各ビューでは異なる検証ルールが必要です。
ビューとエンティティが1:1である最も単純なケースでは、データアノテーションを直接使用できますが、これは実際に最も単純なアプリケーション用であり、このような簡単なアプリケーションを実行すると、ASP.NETダイナミックデータを直接使用し、フレームワークをすべてのページを作成できるようにすることができます。エンティティモデルに基づいて。
ASP.NETダイナミックデータは、生成されたエンティティにデータアノテーションを適用する方法も示しています バディクラス.