3

私はC#でプログラムされた4層のWebアプリケーションを持っています... .Net 4.0:

  • UIレイヤー
  • ビジネスレイヤー
  • データ アクセス層
  • エンティティ レイヤー

データ レイヤーには edmx エンティティ レイヤーが含まれており、(t4 スクリプトによって生成された) POCO オブジェクトが含まれており、そのレイヤーは他のすべてのレイヤーで参照されています。

たとえば、新しい顧客を作成するために MVC フォームを作成する場合.... エンティティ レイヤーに名、姓などのフィールドを持つ顧客クラスが既にありますが、その自動生成された POCO クラスにはデータ注釈がありません。検証用... IE [必須] など フォーム送信時用

私の現在の解決策は、私の poco クラスとほぼ同じであるが、これらの追加の検証アノテーションを持つ新しいモデル クラスを作成することです。

私が知りたいのは、MVC モデル (UI レイヤー) で特定の POCO オブジェクトを使用する簡単な方法があるかどうかです。クラスをほとんど書き直す必要はありません...また、これらの POCO クラスを生成する t4 を変更する必要もありません ( 't4 の速度に達していません)。

これは、stackoverflow http://automapper.codeplex.com/の別の投稿から見ました... これでうまくいくかどうか、または最善の解決策であるかどうかはわかりません。

4

2 に答える 2

6

POCO クラスが次のように宣言されている場合:

public class Person {
    public string FirstName { get; set; }
    public string LastName  { get; set; }
}

次に、T4 を部分クラスに変更するだけで、別のファイルで定義できます。

[MetadataType(typeof(PersonMetadata))]
public partial class Person {

    internal class PersonMetadata {

        [Required]
        // insert other metadata here
        public string FirstName { get; set; }

        // and if you don't want metadata for lastname, you can leave it out
    }
}

追加の 2 つのポイント - メタデータ クラスは、定義したパーシャルにネストする必要はありませんが、その方がすっきりしていると思います。また、タイプはメタデータ クラスで一致する必要がないため、必要に応じてそれらをすべてオブジェクトにすることもできます (また、このように Web でいくつかの例を見ることができるかもしれません)。

于 2010-06-04T19:52:38.363 に答える
4

T4 テンプレートの変更はそれほど難しくありません。私は最近同じ問題に直面し、T4 を少し読んでから、テンプレートを変更して、生成されたプロパティを必要な方法で作成することにしました (注釈、私の場合は NotifyPropertyChange などで同じ POCO オブジェクトを使用しているため) MVC UI および Silverlight UI で)。

T4 の変更を必要としないソリューションを探している場合でも、これが役立つことを願っています。

于 2010-06-04T19:48:34.667 に答える