0

我正在努力学习EF Code first。最初,我在 ModelClass 上使用 DataAnnotation 尝试了所有约束。而且工作很好。
但现在我正在尝试使用Fluent API独立配置文件,但它无法重新创建数据库并抛出此错误

无法检查模型兼容性,因为数据库不包含模型元数据。只能检查使用 Code First 或 Code First 迁移创建的数据库的模型兼容性。

这是我的模型

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 APIOnModelCreating

//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类一起使用的原因。请有任何建议

4

1 回答 1

0

错误发生在应用程序的其他部分,由于创建了哪个数据库架构,但dbo._MigrationHistory无法在 sqlServer 上创建表,这就是 Codefirst 无法删除数据库的原因,因为所需的信息不存在。当我删除数据库时,它可以正常工作,但我猜浏览器正在显示缓存的数据。当我重新启动系统时,一切都很好。

于 2012-05-12T17:53:39.923 回答