2012-05-12 77 views
0

我正在嘗試學習EF Code first。最初,我已經使用ModelClass上的DataAnnotation嘗試了所有約束。工作很好。
但現在我想使用相同隨着Fluent API獨立的配置文件,但它無法重新創建數據庫,並拋出這個錯誤無法使用EF-Code首先重新創建數據庫

型號的兼容性無法進行檢查,因爲該數據庫不包含模型元數據。只能使用Code First或Code First Migrations創建的數據庫檢查模型兼容性。

這裏是我的模型

public Class User 
{ 
    public string UserID { get; set; } 
    public string Username { get; set; } 
    public string Password { get; set; } 
} 

這裏是我的DbContext

public class AppContext : DbContext 
{ 
    public DbSet<User> Users { get; set; } 

    //Public constructor to Call DropCreateDatabaseIfModelChanges method 
    public AppContext() 
    { 
     //Calling the Method to ReCreate the database 
     Database.SetInitializer(new DropCreateDatabaseIfModelChanges<AppContext>()); 
    } 

    //Overriding OnModelCreating Method to Configure the Model using Fluent API 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Configuration.Add(new UserConfiguration()); 
    } 
} 

這裏是我的UserConfiguration類

public class UserConfiguration : EntityTypeConfiguration<User> 
{ 
    public UserConfiguration() 
    { 
      //Using Fluent API to configure Model 
      HasKey(x => x.UserID); 
      Property(x => x.Username).IsRequired().HasMaximumLength(50); 
      Property(x => x.Password).IsRequired().HasMaximumLength(50); 

    } 
} 

我不知道我在哪裏錯了。任何建議都是可觀的。

注:我使用的EF 4.3.1

編輯
Fluent API運作良好,如果我直接把配置在OnModelCreating方法即

//Overriding OnModelCreating Method to Configure the Model using Fluent API 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     //Instead of Standalone Configuration file 
     //modelBuilder.Configuration.Add(new UserConfiguration()); 

     //putting configuration here only 
      modelBuilder.Entity<User>().HasKey(x => x.UserID); 
      modelBuilder.Entity<User>().Property(x => x.Username).IsRequired().HasMaximumLength(50); 
      modelBuilder.Entity<User>().Property(x => x.Password).IsRequired().HasMaximumLength(50); 
    } 

但是我不知道它不能使用獨立配置文件的原因,例如UserConfiguration class。任何建議請

+0

刪除舊數據庫並重試。 –

+0

@LadislavMrnka我已經嘗試過,但沒有運氣。 :( – Vivek

+0

@GertArnold感謝您的編輯 – Vivek

回答

0

錯誤發生在應用程序的某些其他部分,由於創建了哪個數據庫模式,但表dbo._MigrationHistory無法在sqlServer上創建,也就是Codefirst無法刪除數據庫的原因,因爲所需的信息不是那裏。當我刪除數據庫它最大工作,但我猜瀏覽器顯示緩存的數據。一切都很好,當我重新啓動系統。