4

私は EF 4.1 Database First アプローチを使用しており、T4 テンプレートは別のアセンブリで POCO クラスを生成します。データをフェッチするためのリポジトリと、UI との通信に使用されるサービス レイヤーがあります。

カスケードドロップダウンを作成しようとしていました。私は MVC と EF 4.1 が初めてなので、stackoverflow で可能な解決策を検索しました。

これは、ビューモデル クラスのサンプルです。

public class MyViewModel
{
public int CustomerId { get; set; }
public string CustomerName { get; set; }
public IEnumerable<Phone> Phones { get; set; }
}

私がこれまでに読んだこと、解決策は次のとおりです。

  1. プロパティを参照する際に使用ScriptIgnoreAttributeSystem.Web.Script.Serializationます - POCO プロジェクトで System.Web への参照を追加したくないため、これを実際に行いたくありません。

  2. EF 4.1 DbContext で遅延読み込みを無効にする - プロジェクト全体でインクルードを使用するかどうかわからない

  3. 匿名型を返す - プロジェクトが大きくなると、このアプローチで問題が発生しますか?

  4. ViewModel を使用します - 1 つ以上の電話を持つ顧客がいるとします。最初のドロップダウン リストで顧客を選択し、2 番目のドロップダウン リストで顧客の電話をすべて表示します。
    しかし、これは私の Phones オブジェクトで循環例外を生成しませんか? または、Phone オブジェクトの特別なクラスを作成しますか? それは多くの不要なコードのようです。

  5. AutoMapper を使用してください - AutoMapper の経験がないので、それがどれほど複雑かわかりません。

あなたはどちらに投票しますか、そしてその理由は何ですか?

4

1 に答える 1

5

ビュー モデルとAutoMapperを使用して、ビューに送信するドメイン モデルとビュー モデルをマッピングします。このようにして、ビューに送信されるプロパティを完全に制御できるため、サーバーとクライアント間で送信されるデータの量が削減されます。また、ビュー モデルを使用しているため、ドメイン エンティティの変更に対するコードの回復力が向上します。それらを変更すると、マッピング レイヤーのみが影響を受けるため、コントローラーやビューに触れる必要はありません。

したがって、私のアドバイスは、AutoMapper をダウンロードし、ドキュメントを読んで使い始めることです。それは人生を変えるものです、信じてください。

于 2011-07-08T10:19:38.027 に答える