EF CodeFirst を使用してコードからデータベースを生成することについて、Julie Lerman のチュートリアルに従っています。私は MVC4 を使用しており、デフォルトのコントローラーで作業しています。私がしたいのは、データベースを生成することだけです。ただし、彼女のチュートリアルでは、彼女はコンソール アプリケーションを操作し、Main 関数で create_blog メソッドを呼び出しています。create_blog 関数は、名前が示すようにデータベースを作成する作業を行います。
私のGlobal.asaxには、これがあります:
Database.SetInitializer(new CIT.Models.SampleData());
これは私の SampleData クラスです:
public class SampleData : CreateDatabaseIfNotExists<Context>
{
protected override void Seed(Context context)
{
base.Seed(context);
new List<Software> {
new Software { Title = "Adobe Creative Suite", Version = "CS6", SerialNumber = "1234634543", Platform = "Mac", Notes = "Macs rock!", PurchaseDate = "2012-12-04", Suite = true, SubscriptionEndDate = null, SeatCount = 4, SoftwareTypes = new List<SoftwareType> { new SoftwareType { Type="Suite" }}, Locations = new List<Location> { new Location { LocationName = "Paradise" }}, Publishers = new List<SoftwarePublisher> { new SoftwarePublisher { Publisher = "Adobe" }}},
new Software { Title = "Apple iLife", Version = "2012", SerialNumber = "123463423453", Platform = "Mac", Notes = "Macs still rock!", PurchaseDate = "2012-11-04", Suite = true, SubscriptionEndDate = null, SeatCount = 4, SoftwareTypes = new List<SoftwareType> { new SoftwareType { Type="Suite" }}, Locations = new List<Location> { new Location { LocationName = "81st Street" }}, Publishers = new List<SoftwarePublisher> { new SoftwarePublisher { Publisher = "Apple" }}},
new Software { Title = "Microsoft Office", Version = "2012", SerialNumber = "12346231434543", Platform = "PC", Notes = "Macs really rock!", PurchaseDate = "2011-12-04", Suite = true, SubscriptionEndDate = null, SeatCount = 4, SoftwareTypes = new List<SoftwareType> { new SoftwareType { Type="Suite" }}, Locations = new List<Location> { new Location { LocationName = "Paradise" }}, Publishers = new List<SoftwarePublisher> { new SoftwarePublisher { Publisher = "Microsoft" }}}
}.ForEach(s => context.Software.Add(s));
}
}
コンパイル時にエラーは発生しません。データベースがありません。App_Data を調べたところ、そこにあるのはデフォルトのデータベースだけです。エラーが発生したときにそのファイルを指していたため、呼び出されている dbContext があります。サイトが最初にコンパイルされるときに呼び出される create メソッドが必要ですか?