2012-06-08 170 views
2

我在一个简单的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 。

+1

看起来像你应该为学生定义一个PK。我假设你有你的模型之间的关系。此外,它明确指出“ModelValidationException”而不是“DatabaseValidationException”。 IT是一个模型问题,而不是数据库问题。 –

+0

您确定要使用EF与sdf文件而不是常规数据库吗? – abatishchev

回答

4

您的模型无效 - Student实体没有定义键,并且在模型有效之前不会触发数据库创建。

您应该添加访问器到您的StudentId。这将使模型有效并触发数据库创建

public Guid StudentId { get; set; } 
+0

{叹}最简单的事情....非常感谢archil。 – simon831

+0

@ simon831不客气 – archil

相关问题