1

EF T4 POCO Generatorによって生成されたモデルを使用し、MVCプロジェクトの/Modelsで通常のモデルが行うようにそれらの検証属性を活用するためのいくつかの提案をお願いします。

背景:私たちはウェブアプリを設計しようとしています。2、3人の開発者がそれに取り組みます。これはスクラムスタイルであり、Webアプリを構築するときにクライアントから定期的に要件の変更を取得します。テーブル、列、およびリレーションは、それに応じて変更される場合があります。

私たちのアプローチ:新しいテーブルと列がデータベースに追加されるたびに、EF T4はPOCOモデルを自動的に更新できるため、EFT4POCO生成を使用します。これらのPOCOモデルをMVCプロジェクトのモデルレイヤーとして使用します(MVCプロジェクトの/ Models /フォルダーに配置する代わりに、別のModels.dllに配置し、プロジェクトに含めます)。

問題:モデルクラスとプロパティに属性を追加したい。ただし、EF T4はモデルクラスをオーバーライドするため、これらの属性をこれらのモデルに追加することはできません(また、そうすることになっているとは思われません)。正しいアプローチが何であるかはわかりません。

MVCプロジェクトのラッパーViewModelsで属性を作成することしか考えられません。それらは、EFT4によって実行されたModels.dllから必要なすべてのモデルをラップアラウンドします。次に、それらの前に属性を配置します。しかし、DRYの原則を破ることは私には醜いように見えます。どうしますか?アイデアをありがとう!

---編集---ラッパーのアイデアを支援するクールなトリックをここで見つけました。しかし、私はさまざまな提案を見てそれらを比較するためにオープンになりたいので、それについては言及しませんでした:)

4

1 に答える 1

2

バディクラスを使用します。EFクラスはパーシャルとして生成されます。別の部分クラスを作成し、属性で注釈を付けMetadataTypeます。

[MetadataType(typeof(FriendMeta))]
public partial class Friend
{
}

次に、バディクラスの同じ名前のプロパティにデータアノテーション属性を追加できます。

public class FriendMeta
{
    [DisplayName("First Name")]
    public string FirstName { get; set; }

    [DisplayName("Last Name")]
    public string LastName { get; set; }

    [DisplayName("Date of Birth")]
    public DateTime BrithDate { get; set; }
}

ASP.NETMVCメタデータプロバイダーがこれらの属性を選択します。

于 2012-05-21T17:00:13.047 に答える