在当前项目中,我使用实体框架6.0 alpha3和代码优先方法。我有一个自定义数据上下文,它在构造函数中使用DbConnection来访问它的数据库。我的迁移既可以在VisualStudio中执行,也可以在运行时使用MigrationToLatestVersion
初始值设定项完成。实体框架6.0代码优先迁移 - 模型/数据库兼容性错误?
样品:
public class MyStackOverflowSampleContext : DbContext {
DbSet<Question> Questions { get; set; }
DbSet<Answers> Answers { get; set; }
public MyStackOverflowSampleContext(DbConnection connection)
: base(connection) { }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.HasDefaultSchema("CRM");
base.OnModelCreating(modelBuilder);
}
}
我检查数据库模型使用以下
if(_dbContext.Database.CompatibleWithModel())
......这是,在这种情况下:假的。
如果我现在运行初始化程序,并且我的数据库还没有可用,那么所有东西都会按照它应该创建的方式创建,并且CompatibleWithModel
函数返回 - 正如所料:true。
现在,为了测试的目的,我改变了数据库,首先稍微,然后完全。我删除了一列,然后是整个表格,甚至是_MigrationsHistory
表格。
但无论我做什么:_dbContext.Database.CompatibleWithModel()
始终返回true!当我尝试初始化上下文时,出现奇怪的错误,例如:“The table TabAnswers already exists in database.
” - 即使它不再存在。
但是,当我尝试更新,以恢复我的数据库:“There are currently no pending updates...
”
这是一个错误?
您似乎缺少上下文类中的默认无参数构造函数。我没有使用EF6进行实验,但在EF5中,MigrationToLatestVersion会抛出一个异常,表明上下文不可构造。 – 2013-05-06 12:55:44
@WiktorZychla提供了无参数构造函数 - 我只是忘记将其包含在问题中。但是你是对的,这个不会那样工作。 ;) – Atrotygma 2013-05-06 13:20:40