Entity Framework Code First でRailsっぽくDBを管理する
こんにちは。ザクです。出世したら、リンクの色を赤に変えます。
.Net MVC4になってだいぶRailsっぽいことができるようになっています。しかし、Entity FrameworkのCode Firstについての情報のなんと少ないこと。。。仕方がないので、自分で使い方を色々まとめてみます。
Code Firstってなんですか?
ぶっちゃけ、Microsoft的にはCode Firstをなんて定義してるのかザクは知りませんw 僕の理解は、Railsの「DB Migrations」なんかなーと。たしかに、DB Migrations後進の.Netの世界では、まだまだDBのスキーマをSQLサーバ上でごりごり書いていたりしています。(いいかげん、プログラマーがDB直接触るのやめようよ。。。)
MVC4にはCode Firstがあるため、Railsプログラマーには割りとすんなり入り込めます。C#はJavaっぽいですし。
Code Firstをマスターするには?
下のチュートリアルをやってみるのが一番早いです。(ただし英語です)
Getting Started with EF 5 using MVC 4 | The ASP.NET Site
MVC4アプリケーションを作ると、EF5がすでに入っているはずなので、パッケージマネージャのコンソール(何故かCode Firstのコマンドラインは、ここで操作する)から、enable-migrationsすればアプリケーションがCode First化されます。
Code First化するまえに先にモデルを用意する
見出しのまんまですね。Code FirstでSQLサーバに自動でDBスキーマを作るには、スキーマになるモデルを先に用意してやる必要があります。チュートリアル第1回を参考に、Student、Enrollment、Courseの3つのモデルをModelsフォルダの中に作ってやりましょう。Modelファイルの追加は、Modelsフォルダを右クリックして、追加を選びます。すると「新しい項目の追加」ダイアログが表示されるので、「クラス」を選び、名前をつけて追加ボタンを押します。
Creating an Entity Framework Data Model for an ASP.NET MVC Application (1 of 10) | The ASP.NET Site
コードの中身は、チュートリアルにあるものまんまコピペでいいでしょう。namespaceだけちゃんとアプリの名前に合わせてくださいね。
DALファイルを用意する
モデルだけでは、Code First化はまだできません。DALファイルと呼ばれるものを用意する必要があります。DALは「Data Access Layer」の略だそうです。このファイルを通じて、EF5がアプリ内のモデルを見つけてDBスキーマ管理してくれるようになります。
プロジェクト直下に、「DAL」というフォルダを追加してください。フォルダができたら、またクラスファイルを追加します。こちらも中身はチュートリアルのをまんまコピペでいいです。
チュートリアルでは、Web.configのconnectionStringが設定されている部分のnameを書き換えて、SchoolContextとしていましたが、DefaultConnectionのまま使いたい場合は、DALファイルに以下のようなコンストラクタを追加してやります。
using MvcApplication1.Models;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
namespace MvcApplication1.DAL
{
public class SchoolContext : DbContext
{
public SchoolContext()
: base("DefaultConnection")
{
}
public DbSet<Student> Students { get; set; }
public DbSet<Enrollment> Enrollments { get; set; }
public DbSet<Course> Courses { get; set; }
}
}
チュートリアルのコードサンプルでは、
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
という行が追加されていたと思いますが、これはモデルの命名規則の規約を乗っ取る方法なので、規約のまま利用したい場合は、この部分は削除します。僕はRailsで慣れているので、規約のまま使っています。
enable-migrationsしてみる
やっとenable-migrationsできるようになりました。チュートリアル通りにパッケージマネージャのコンソールからコマンドを実行しましょう。
enable-migrations -contexttypename SchoolContext
「Code First Migrations がプロジェクト <アプリ名>で有効になりました。」とメッセージが表示されたら無事Code First化が完了しています。同時にMigrationsというフォルダがプロジェクトに追加され、中にはConfiguration.csが入っています。
Configuration.csにシードデータを用意する
スキーマだけできても、中にデータが入っていないとアプリ開発では役に立ちません。Code Firstで自動生成されるテーブルに入れるデータを用意しましょう。データはConfiguration.csに書きます。サンプルデータはチュートリアルのをコピペでいいでしょう。
いざCode First!
ここまできたら、Code Firstの準備は整いました。以下のコマンドをコンソールから実行してみましょう。
add-migration InitialCreate update-database
上のコマンドはRailsでいう「rails generate migration」です。下が「rake db:migrate」ですね。上のコマンドで、migrationファイルが生成されるので、update-databaseで実行です。
テーブルができたかの確認には、VSだったらサーバーエクスプローラーが便利ですね。
シードデータもちゃんと入っていますね!
追伸 シンタックスハイライトって「はてな記法」の時しかできないのね。。しかも一度保存したら記法変えられない。。次からちゃんとやります。