未创建实体框架数据库
本文关键字:数据库 框架 实体 创建 | 更新日期: 2023-09-27 18:36:46
我首先在一个简单的MVC3应用程序中使用EF4代码。上下文对象正在选取正确的连接字符串,并调用初始值设定项构造函数,就像 OnModelCreate 方法一样,但永远不会调用种子方法,也不会创建数据库。 知道为什么吗?
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>
我认为抛出的异常只是抱怨尚未创建数据库:
[模型验证异常:在模型生成过程中检测到一个或多个验证错误:
.Data.Edm.EdmEntityType: : EntityType 'Student' 未定义键。定义此实体类型的键。System.Data.Edm.EdmEntitySet: EntityType: EntitySet Students 基于未定义键的 Student 类型。
您的模型无效 - Student
实体没有定义键,并且在模型有效之前不会触发数据库创建。
您应该将访问器添加到您的StudentId
。这将使模型有效并触发数据库创建
public Guid StudentId { get; set; }