前回はCodeFirstでデータベースを作成し、テンプレートを使ってEntityFrameworkと連動したページを作成しました。今回はテンプレートを使わず、社員テーブルと配属先テーブルを結合したモデルを表示し、それを元にデータを編集するページを作成してみたいと思います。
まずはモデルを定義します。
社員リスト
public class EmployeeList { /// <summary> /// ID /// </summary> public int Id { get; set; } /// <summary> /// 社員名 /// </summary> public string EmployeeName { get; set; } /// <summary> /// 配属先名 /// </summary> public string AssignName { get; set; } }
次はコントローラーを作成します。モデルを指定しない空のコントローラーです。
空のコントローラーの作成
では早速、作成したクラスのIndexメソッドをいじくってみます。
Indexメソッド
public ActionResult Index() { var resultList = new List<EmployeeList>(); using(var context = new MvcTestContext()) { var items = from p in context.Employees join g in context.Assigns on p.AssignId equals g.AssignId into gg from ggg in gg.DefaultIfEmpty() orderby p.SortNumber ascending select new { p.EmployeeId, p.EmployeeName, AssignName = (ggg != null ? ggg.AssignName:string.Empty) }; //どうでもいいけどParallel使うと順序が狂うよ! foreach (var item in items) { resultList.Add(new EmployeeList { Id = item.EmployeeId, EmployeeName = item.EmployeeName, AssignName = item.AssignName }); } } return View(resultList); }
コード自体は単純なので特に解説は不要でしょう。続けて、ビューも作ります。ビューもせっかくですから空のビューを作ります。
ビューの作成
ではRazorに挑戦します。挑戦とは言っても前回作成したEntityFrameworkと連動したテンプレートを見本にすれば特に難しいこともないです。モデルを宣言し、受けたデータをぶん回してデーブルで表示するだけです。
Index.cshtml
@model IEnumerable<MVCTestProject.Models.EmployeeList> @{ ViewBag.Title = "社員リスト"; } <h2>社員リスト</h2> <table> <tr> <th> 社員名 </th> <th> 配属先 </th> </tr> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelitem => item.EmployeeName) </td> <td> @Html.DisplayFor(modelitem => item.AssignName) </td> </tr> } </table>
ここで一端ブラウザで表示してみます。
実行結果
どうやら希望通りの結果が表示されてるみたいです(IDは表示する必要ないので省きました。)。
内容は簡単だったんですが、ちょっと長くなりすぎたのでこの辺で切ります。編集機能は次回にします。