はじめてのRazorらぞぅ(3)

上の続きです。

目標
CRUDのスケルトンを動かしてテストの書き方を把握するところまで。

やったこと

次のチュートリアル。今日は、自動生成した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で失敗しました。

リビルドしたら直りました。なんだろ。