指定的表不存在.[__MigrationHistory]

dev*_*xer 4 entity-framework sql-server-ce ef-code-first ef-migrations entity-framework-4.3

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

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

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

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

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

类型"System.Data.SqlServerCe.SqlCeException"的第一次机会异常出现在System.Data.SqlServerCe.dll
类型的第一个机会异常"System.Data.SqlServerCe.SqlCeException"发生在System.Data.SqlServerCe.dll
第一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'类型的
第一次机会异常

放置try/catch块dbContext.Database.Create()无效.

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

我该怎么做才能消除第一次机会异常?

And*_*ers 5

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

假设您的意思是一个包含模型所需的实际模式对象的数据库?

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

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

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