はじめてのRazorらぞぅ(3)
- はじめてのRazorらぞぅ http://d.hatena.ne.jp/torazuka/20130723/dotnetmvc
- はじめてのRazorらぞぅ(2) http://d.hatena.ne.jp/torazuka/20130724/dotnetmvc
上の続きです。
やったこと
次のチュートリアル。今日は、自動生成したControllerとViewまわりのコードを確認しただけです。
学んだこと
DbContext
事前にModelクラスの中で、そのModelに対するDbContextの派生クラスを定義しておく。その後、Controllerクラスで、DbContext派生クラスのインスタンスを生成する。これがModelオブジェクトへのアクセス手段になる。
型付けされたModel
ControllerからViewに投げられるViewBagという動的なオブジェクトを、前回、前々回は見ましたが、型付けされたModelオブジェクトもあるらしい。こちらはコンパイル時チェックもしてくれるし、IDEのインテリセンスも効く。
Controllerの生成時に指定したModelを、View templateの先頭でincluedすることで、ControllerからViewに渡されたModelのデータに(強い型付けのModel Objectを介して)アクセスできる。
Htmlオブジェクト(?)
Html.DisplayNameForメソッドやHtml.DisplayForメソッドといったヘルパーメソッドがあり、ViewでModelからデータを取り出すのに使える。
Html.ActionLinkメソッドは、ハイパーリンクを作成して返す。1番目の引数がリンクテキストなので、この値をリソースファイルから取得する方法を知りたい。
.NET MVCでは、SAStrutsでいうところのActionForm的なものとDTO的なものが分かれてないという理解でよいのでしょうか? というか、Modelをインスタンス化したものをActionForm的に使っている感じ? アーキテクチャがまだよく分かりません。
データベースの中身の見方(改)
昨日メモしたのとは違う方法。Visual studio Express 2012 for Webを開いたままで、スムーズにデータが確認できた。
Solution Explorerから、App_Dataの下にある(データベース名).mdfをダブルクリックすると、Database Explorerが開く。[Data Connection]→[(データベースコンテキスト名)]→[Tables]とツリーをたどる。テーブル名を右クリック→[Show Table Data]で、データを確認できる。見終わったら、右クリック→[Close Connection]。
テーブル名を右クリック→[Open Table Definition]で、テーブル定義も確認できる。
チュートリアルで作成したテーブル定義を見ると、NULLを許容するカラムと許容しないカラムが勝手にできていました。明示的に指定していないのに、なぜでしょう? おそらく、値の型に依存しているのだと思われます。NVARCHARにマッピングされたカラムだけが、NULLを許容する設定になっていました。これらは、Modelクラスではstringフィールドとして定義しています。一方、intや日付型で宣言したフィールドには、NOT NULL制約がかかっていました。
処理実行後の画面遷移のやり方
遷移先のViewページを返すアクションメソッドの名前を、直接指定する。
return RedirectToAction("Index");
ハマったところ
デバッグ実行したらSystem.Data.EntityExceptionが出ました。昨日は動いた構成なのに。
EntityException was unhandled by user code
基になるプロバイダーがOpenで失敗しました。
リビルドしたら直りました。なんだろ。