2012-06-08 171 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

相關問題