我在一个简单的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:是模型中检测到一个或多个验证错误代:
.Data.Edm.EdmEntityType::EntityType'Student'没有定义键。定义此EntityType的关键字。 System.Data.Edm.EdmEntitySet:EntityType:EntitySet Students 基于没有定义键的类型 Student 。
看起来像你应该为学生定义一个PK。我假设你有你的模型之间的关系。此外,它明确指出“ModelValidationException”而不是“DatabaseValidationException”。 IT是一个模型问题,而不是数据库问题。 –
您确定要使用EF与sdf文件而不是常规数据库吗? – abatishchev