単純な MVC3 アプリケーション内で最初に EF4 コードを使用しています。正しい接続文字列がコンテキスト オブジェクトによって取得され、OnModelCreating メソッドと同様に初期化子コンストラクターが呼び出されますが、シード メソッドは呼び出されず、データベースは作成されません。理由はありますか?
protected void Application_Start()
{
Database.SetInitializer<SchoolContext>(new SchoolInitializer());
SchoolContext context = new SchoolContext();
context.Database.CreateIfNotExists();
...
}
public class SchoolInitializer : DropCreateDatabaseAlways<SchoolContext>
{
public SchoolInitializer()
{
}
protected override void Seed(SchoolContext context)
{
var students = new List<Student>
{
new Student {StudentId = Guid.NewGuid(), Name = "Carson" },
new Student {StudentId = Guid.NewGuid(), Name = "Meredith" }
};
students.ForEach(s => context.Students.Add(s));
context.SaveChanges();
}
}
public class Student
{
[Key]
public Guid StudentId;
public string Name;
}
public class SchoolContext : DbContext
{
public DbSet<Student> Students { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
構成:
<connectionStrings>
<add name="SchoolContext" connectionString="Data Source=|DataDirectory|School.sdf" providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>
スローされた例外は、データベースが作成されていないと不平を言っているだけだと思います。
[ModelValidationException: モデル生成中に 1 つ以上の検証エラーが検出されました:
.Data.Edm.EdmEntityType: : EntityType 'Student' にはキーが定義されていません。この EntityType のキーを定義します。System.Data.Edm.EdmEntitySet: EntityType: EntitySet "Students" は、キーが定義されていないタイプ "Student" に基づいています。