私は現在、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 についても読みましたが、このツールをそのような「問題」に使用するのが「正しい」かどうかはわかりません。
これを読んでくれてありがとう - そして、答えやアドバイスをくれてありがとう!:-)