読者です 読者をやめる 読者になる 読者になる

山田さんのASP.NET MVC連載2回目が@ITに掲載

ASP.NET

スキャフォールディング機能を利用したアプリ作成方法解説の回ですね。
実際試した人は分かるでしょうけど、これを作るの結構簡単にできます。


P4の引き数パラメタとして設定したモデルはUpdateModel/TryUpdateModelメソッドを実行した状態になっているので、Create部分はシンプルで分かり易いですねー。こんなので追加出来ちゃうの?って感じすらするかも。
入力検証については次回以降との事なのでASP.NET MVCの検証に興味がある方は次回を楽しみに。と言ったところでしょうか。
なんとなーく気になった点が幾つか。


普通にLINQ書いて、全部それでIndex/Detail/Create/Edit書いちゃってれば良いんですが、山田さんの記事ではCreateの部分だけちょっと便利な方法を使ってます。それについての捕捉かな。

  1. AddToBookメソッドって全部のエンティティで共通?

ここでは、自動バインドされたBookオブジェクトをAddToBookメソッドでコンテキスト・オブジェクトに追加したうえで、SaveChangesメソッドによりデータベースに反映している。


EDMを使った場合、エンティティとして定義されたテーブルに対してAddToメソッドが利用できるようになります。*1
なので、AddToXXXメソッドを使えば、コンテキストオブジェクトに追加できます。

  1. Index部分でもエンティティを活用できる。

上記のAddToXXXメソッドと若干関係ある部分なんですが、EDMの機能で"コンテキスト・オブジェクト.エンティティセット.ToList()"と書いてあげるとIndex部分全部引っ張って来れます。
LINQでも一行なんであんまり意味無い部分ですができるという意味で。
↓記事から抜粋

public ActionResult Index() {

  // Bookテーブルからすべてのレコードを取得
  var books = from b in _db.Book select b;

  // 取得したオブジェクト(リスト)をビュー(Index.aspx)に引き渡す
  return View(books);
}

↓もう一つの記述方法

public ActionResult Index() {

  // Bookテーブルからすべてのレコードを取得してビュー(Index.aspx)に引き渡す
  // もしかしたらBookセットとかかも。
  return View(_db.Book.ToList());
}

ダイレクトにViewに書けるのでシンプルという意味ではこっちのが良いかも?程度です。

連載:ASP.NET MVC入門:第2回 スキャフォールディング機能で軽々DB連携アプリケーション (1/5) - @IT

*1:正確に言うと、エンティティセット名。なので、日本語のVS環境では既定で"AddTo[エンティティ名]セット"メソッドとかになってたような。。。