we using ef 6 , integration tests want remove our database, , recreate using database context.
we try exclusive use of database, getting database in use errror. tried:
private void createdatabase() { mydbcontext context = new mydbcontext(); sqlconnection sqlconnection = context.database.connection sqlconnection; lockdb(sqlconnection); context.database.delete(); context.database.createifnotexists(); unlockdb(sqlconnection); _context = context; } private void lockdb(sqlconnection connection) { const string cmdtext = "use[master];" + "if exists(select * sys.databases name = 'mydb')" + "begin" + " alter database[mydb] set single_user rollback immediate;" + "end;"; openconnection(connection); executecommand(connection, cmdtext); }
what missing?
well wasn't 1 problem found answer here (on stack ofcourse)
the trick delete database in single sql statement
private void deletedb(sqlconnection connection) { const string cmdtext = "use[master];" + "if exists(select * sys.databases name = 'tor')" + "begin" + " alter database[tor] set single_user rollback immediate;" + " drop database [tor];" + "end;"; openconnection(connection); executecommand(connection, cmdtext); }
update
well above not bullet proof.
now using:
private void createdatabase() { tordbcontext context = new tordbcontext(); context.database.delete(); context.database.create(); _context = context; }
works long not have queries open in management studio. not bother our integration tests...
Comments
Post a Comment