4

Entity Framework Codeが最初に利用可能になって以来、私は次の方法を使用しています。

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 ServerCompactADO.NETデータプロバイダー
ErrorCode=-2147467259
HResult = -2147217865
NativeError = 0
StackTrace:at System.Data.SqlServerCe.SqlCeCommand.ProcessResults(Int32 hr)
InnerException:

Debug-Exceptionsに移動し、Thrown for "Common Language Runtime Exceptions"をチェックすると、実行が停止し、上記の例外が発生します。チェックを外すと、データベースは正しく作成されているように見えますが、出力ウィンドウに次のエラーステートメントが4回繰り返されます。

タイプ'System.Data.SqlServerCe.SqlCeException'のファーストチャンス例外がSystem.Data.SqlServerCe.dllで発生しましたタイプ'System.Data.SqlServerCe.SqlCeException'の ファースト
チャンス例外がSystem.Data.SqlServerCe.dllで発生しました
タイプ'System.Data.SqlServerCe.SqlCeException'のチャンス例外がSystem.Data.SqlServerCe.Entity.dllで発生しました
タイプ'System.Data.EntityCommandExecutionException'のファーストチャンス例外がSystem.Data.Entity.dllで発生しまし
たファーストチャンス例外タイプ「System.Data.EntityCommandExecutionException」がSystem.Data.Entity.dllで発生しましたタイプ「System.Data.EntityCommandExecutionException」
の最初のチャンスの例外がSystem.Data.Entity.dllで発生しました

try/catchブロックを配置しdbContext.Database.Create()ても効果はありません。

私の目標は、完全に空白のデータベースを作成し、それを手動でデータで埋めることです。EntityFrameworkの新しい移行機能を使用したくありません。

ファーストチャンスの例外を排除するにはどうすればよいですか?

4

1 に答える 1

6

私の目標は、完全に空のデータベースを作成することです

モデルに必要な実際のスキーマ オブジェクトを含むデータベースを意味すると仮定しますか?

その場合、次の 2 つのオプションがあります。

1) 例外を無視する - SqlCE では、EF はデータベースの作成時に移行パイプラインを内部的に使用します。例外は、移行が __MigrationHistory テーブルの存在を判断する方法の実装の詳細です。

2) 従来の API を使用する - ObjectContext のデータベース作成 API は、従来の非移行コード パスを使用します。DbContext を IObjectContextAdapter にキャストして、ObjectContext 参照を取得します。

于 2012-08-13T16:45:25.207 に答える