指定的表不存在。 [__MigrationHistory]

时间:2012-08-13 01:44:18

标签: entity-framework ef-code-first sql-server-ce entity-framework-4.3 ef-migrations

自从Entity Framework Code First可用后,我一直在使用以下方法:

public virtual void CreateDatabase()
{
    var dbContext = _dbContextLocator.Current;
    dbContext.Database.Delete();
    dbContext.Database.Create();
    dbContext.Database.Initialize(true);
}

最近,我注意到当dbContext.Database.Create()被点击时,我得到以下异常:

  

发生System.Data.SqlServerCe.SqlCeException   Message =指定的表不存在。 [__MigrationHistory] ​​
  Source = SQL Server Compact ADO.NET数据提供者
  错误码= -2147467259
  的HResult = -2147217865
  NativeError = 0
  StackTrace:在System.Data.SqlServerCe.SqlCeCommand.ProcessResults(Int32 hr)
  InnerException:

如果我转到Debug - Exceptions并检查Thrown是否存在“Common Language Runtime Exceptions”,这会导致执行停止,并且我得到上述异常。如果我取消选中它,数据库似乎正确创建,但我在输出窗口中得到以下错误语句的四次重复:

  

System.Data.SqlServerCe.dll中发生'System.Data.SqlServerCe.SqlCeException'类型的第一次机会异常
  System.Data.SqlServerCe.dll中发生了'System.Data.SqlServerCe.SqlCeException'类型的第一次机会异常   System.Data.SqlServerCe.Entity.dll中发生了'System.Data.SqlServerCe.SqlCeException'类型的第一次机会异常   System.Data.Entity.dll中发生了'System.Data.EntityCommandExecutionException'类型的第一次机会异常
  System.Data.Entity.dll中发生了'System.Data.EntityCommandExecutionException'类型的第一次机会异常
  System.Data.Entity.dll中发生了'System.Data.EntityCommandExecutionException'类型的第一次机会异常

dbContext.Database.Create()周围放置一个try / catch块无效。

我的目标是创建一个完全空白的数据库,然后手动填充数据。我不希望使用Entity Framework的新迁移功能。

如何消除第一次机会异常?

1 个答案:

答案 0 :(得分:5)

  

我的目标是创建一个完全空白的数据库

假设您指的是具有模型所需的实际架构对象的数据库?

如果是这样,您有两种选择:

1)忽略异常 - 使用SqlCE,EF在创建数据库时在内部使用迁移管道。例外是迁移如何确定__MigrationHistory表的存在的实现细节。

2)使用旧版API - ObjectContext上的数据库创建API使用旧的非迁移代码路径。将DbContext转换为IObjectContextAdapter以获取ObjectContext引用。