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的新迁移功能.
我该怎么做才能消除第一次机会异常?
我的目标是创建一个完全空白的数据库
假设您的意思是一个包含模型所需的实际模式对象的数据库?
如果是这样,您有两种选择:
1)忽略异常 - 使用SqlCE,EF在创建数据库时在内部使用迁移管道.例外是迁移如何确定__MigrationHistory表的存在的实现细节.
2)使用旧API - ObjectContext上的数据库创建API使用旧的非迁移代码路径.将DbContext转换为IObjectContextAdapter以获取ObjectContext引用.
| 归档时间: |
|
| 查看次数: |
4277 次 |
| 最近记录: |