ASP.NET MVCでSQL CE + EFコードファーストを使用しようとしています。
- ModelクラスとDbContextを定義し
- ConnectionStringを設定
- SQL CEのsdfファイルをApp_Dataに追加し
- SaveChanges()すると (箇条書きにならないな...) 以下のような例外が飛びます。
System.Data.Entity.Infrastructure.DbUpdateException がキャッチされました
HResult=-2146233087
Message=エントリを更新中にエラーが発生しました。詳細については、内部例外を参照してください。
Source=EntityFramework
StackTrace:
場所 System.Data.Entity.Internal.InternalContext.SaveChanges()
...
InnerException: System.Data.UpdateException
HResult=-2146233087
Message=エントリを更新中にエラーが発生しました。詳細については、内部例外を参照してください。
Source=System.Data.Entity
StackTrace:
場所 System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
...
InnerException: System.Data.SqlServerCe.SqlCeException
HResult=-2147467259
Message=指定されたテーブルは存在しません。 [ Clients ]
Source=SQL Server Compact ADO.NET Data Provider
ErrorCode=-2147467259
NativeError=0
StackTrace:
場所 System.Data.SqlServerCe.SqlCeCommand.ProcessResults(Int32 hr)
...
InnerException:
(引用の中でインデントしたいな...)
色々と試行錯誤してみたのですが、結局空のsdfファイルが存在するとテーブルを作成しようとせずこの例外が発生し、sdfファイルを削除し、sdfの生成をEFにやらせると問題なく動くようです。
DbContextにテーブル作成のためのメソッドも見当たりませんし、この動作は仕様と考えてよいのでしょうか?
現象自体は回避できているのですが、どうも腑に落ちないので質問してみています。
Code Firstは何かとblogエントリーに飛ばされるので、正しい仕様というのがよくわからず戸惑い気味です。この動作に関する仕様などのリファレンス先などわかると幸いです。