Visual C# の ASP.NET Web アプリケーションでプロジェクトを作成した状態からスタートです。
コードファーストの手法で進めてまいります。モデルに書いたコードを、マイグレーションのコマンドを打つことでデータベースに反映していきますわ。
モデルを作成
モデル作成手順
特に「モデルを作る」というメニューは無いようですので、単純に C# のクラスを作ります。
- Models フォルダで右クリック
- 追加 > クラス
- 「単数形.cs」で「追加」
モデル作成時のポイント
- ファイル名は、単数形、キャメルケース、を適用
- クラス内で宣言するプロパティ名の1文字目は大文字(多分キャメルケース)
- ICollection の <> 内は単数形で、プロパティ名は複数形
Migration を始める。データベースを作る
- Web.config の connectionStrings の add で接続先データベースを確認。このデータベースは、マイグレーションの初回だけ作成することになる。
データベース名が気に入らなければ、connectionString の AttachDbFilename と Catalog のデータベース名を変更する。 - ツール > NuGet パッケージ マネージャー > パケージ マネージャー コンソール
PM> enable-migrations
Migration\Configuration.cs が作成されることを確認- Migration\Configuration.cs の文字コードを UTF-8 にして保存し直す。
そうしなかった場合、データベースに挿入されたデータが文字化けした。- ファイル > 名前をつけて保存
- 「上書き保存」ではなく、ドロップダウンリストから「エンコード付きで保存」を選択
- 「Unicode (UTF-8 シグネチャ付き) – コードページ 65001」で保存
開発時にマイグレーションするときの手順
モデルのコードを修正したときに行います。データベースへ内容を反映しますの。
PM> add-migration [変更内容で任意に名付け]
データベースへの変更内容が書かれたファイルを作成- 初回は、
PM> add-migration Initial
とコマンドするのが定番 - 上書きするときは、
PM> add-migration Initial -Force
と -Force オプションを付ける。
うまくいかない時もあるが、その時は対処方法が表示されたのでそのとおりにコマンドを打つことで先に進むことができた。
- 初回は、
- Migration\Configuration.cs の Seed メソッドを修正し、データベースへ流し込むレコードを作成
PM> update-database -Verbose
データベース構造への変更内容、データベースへ流し込むレコードを実行
モデル修正とマイグレーションメモ
- 他のモデルをプロパティとした場合、このプロパティは実際にデータベースのテーブルへ反映されなかった。
- この場合そもそも、add-migration を行っても Up() に反映されていなかった。
マイグレーションを以前の状態に巻き戻すとき
- 初回の前の「無」の状態にはデーターベースを戻すことはできないようだ。直接、データーベースを削除する。
PM> update-database -TargetMigration:Initial
などとコマンドする。
モデル修正後、マイグレーショントラブル
問題
- モデルを修正して、add-migration しても、生成ファイルの Up() および Down() が空だった。
解決方法
強引ですけれども、次の方法でリセットできましたわ!
- 次を削除
- Migrations フォルダを削除
- データベースを削除
PM> enable-migrations
を実行PM> add-migration Initial
を実行
この結果、作成された 201509260119132_Initial.cs ファイルの Up() および Down() に、データベースへの変更内容が記述されておりました♪
【追記】確認ポイント
- ApplicationDbContext クラスに、モデルをプロパティとして追加しているか?
おわりに
参考になったページです。ありがとう存じます!
日本語を文字化けさせないで、Seed 関数からデータベースへレコード登録する方法を導くのに大変参考になりました!
以上です。