4

自从 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:

如果我去调试 - 异常并检查“公共语言运行时异常”的抛出,这会导致执行停止,我得到上述异常。如果我取消选中它,数据库似乎已正确创建,但在我的输出窗口中出现以下错误语句的四次重复:

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.EntityCommandExecutionException”
类型的第一次机会异常发生在 System.Data.Entity.dll

放置一个 try/catch 块dbContext.Database.Create()没有任何效果。

我的目标是创建一个完全空白的数据库,然后手动填充数据。我不想使用实体框架的新迁移功能。

我能做些什么来消除第一次机会异常?

4

1 回答 1

6

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

假设您的意思是具有模型所需的实际模式对象的数据库?

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

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

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

于 2012-08-13T16:45:25.207 回答