2

私は現在、ASP .NET MVC 3 と、データ アクセス用の Entity Framework のコード ファースト アプローチをいじっています。

多くのドキュメント、ブログ、stackoverflow の質問などを読みましたが、次の質問に対する正確な回答が見つかりませんでした。誰かが私を助けてくれることを願っています。

Project と Customer の 2 つのエンティティを含む単純な (データベース) モデルがあります。

public class Project
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual Customer Customer { get; set; }
}

と...

public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Rate { get; set; }
}

たとえば、顧客のリストを表示するために、単純な ViewModel を作成しました。

public class ProjectListModel
{
    public List<Project> Projects { get; set; }
}

私のコントローラーのコードは次のとおりです。

public ActionResult ProjectList()
{
    var model = new ProjectListModel()
    {
        Projects = db.Projects.OrderBy(x => x.Customer.Id).ToList<Project>()
    };
    return PartialView("_ProjectList", model);
}

そのため、プロジェクトのリストと対応する顧客名まで表示できます。

@Html.DisplayFor(modelItem => item.Name), @Html.DisplayFor(modelItem => item.Customer.Name))

そして、ここから私の質問を始めます;-)

「データベース オブジェクト」のリストを返すので、ViewModel の概念を正しく理解しているかどうかはわかりません。どうやってそれをしますか?私は新しいクラスを想像することができました:

public class SingleProjectForViewModel
{
  public string ProjectName {get;set;}
  public string CustomerName { get;set;}
}

ViewModel を次のように変更します。

public class ProjectListModel
{
  public List<SingleProjectForViewModel> {get;set;}
}

...しかし、コントローラーのコードは、ViewModelを埋めるためだけに非常に長くなります(DBからフェッチし、SingleProjectForViewModelのインスタンスを作成し、このインスタンスをインスタンス化されたリストに追加します)-この例では問題ありませんが、より大きなデータクラスがありますさらに複雑なビュー...!?

Auto-Mapper についても読みましたが、このツールをそのような「問題」に使用するのが「正しい」かどうかはわかりません。

これを読んでくれてありがとう - そして、答えやアドバイスをくれてありがとう!:-)

4

1 に答える 1

2

View Models を正しく理解しています。これらは、ビュー レイヤーがデータ レイヤーに結合されないようにすることを目的としています。

コントローラーから複雑さを取り除くために、データアクセスコードをヘルパークラスとメソッドに分割できます/すべきです。これらのメソッドは、データ レイヤーに対してクエリを実行し、ビュー モデルを返します。

私はオートマッパーを使用していませんが、ここで間違いなく役立つもののように思えます。

于 2012-05-08T23:03:21.673 に答える