Entity Framework を使って実装したコードをローカルで実行した際に Initializer の Seed() でエラー。
型 'System.Data.SqlClient.SqlException' の例外が EntityFramework.dll で発生しましたが、ユーザー コード内ではハンドルされませんでした
追加情報:Cannot drop database "[データベース名]" because it is currently in use.
unit testing – “Cannot drop database because it is currently in use”. How to fix? – Stack Overflow
前回の接続でエラーなどが発生した際に接続が残ってしまっているのが原因らしい。
Visual Studio を再起動することで直った。
ちなみに ALTER をかけるといいみたいだけど context.Database.Connection.Database が空文字列で返ってきてうまくいかなかった。
発生したエラーメッセージの [データベース名] を直接指定したら通った。(要検証)
public class CustomInitializer<T> : DropCreateDatabaseAlways<YourContext> { public override void InitializeDatabase(YourContext context) { context.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction , string.Format("ALTER DATABASE [{0}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE", context.Database.Connection.Database)); base.InitializeDatabase(context); } protected override void Seed(YourContext context) { // Seed code goes here... base.Seed(context); } } |