加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

实体框架 – 实体框架中的更改数据库6

发布时间:2020-12-12 16:12:09 所属栏目:MsSql教程 来源:网络整理
导读:我在我的代码中将EF更新为EF 6.0.2,我有以下代码行: applicationDbContext.Database .ExecuteSqlCommand(@"ALTER DATABASE CURRENT SET RECOVERY FULL;"); 更新后,我收到以下错误信息: ALTER DATABASE statement not allowed within multi-statement transa
我在我的代码中将EF更新为EF 6.0.2,我有以下代码行:
applicationDbContext.Database .ExecuteSqlCommand(@"ALTER DATABASE
 CURRENT SET RECOVERY FULL;");

更新后,我收到以下错误信息:

ALTER DATABASE statement not allowed within multi-statement
transaction.

我已经解决了一个TransactalBehavior的问题,如下面的代码:

applicationDbContext.Database.ExecuteSqlCommand(
TransactionalBehavior.DoNotEnsureTransaction,@"ALTER DATABASE CURRENT SET RECOVERY FULL;");

我的问题:

为什么我会收到这个错误与EF 6?
>我的修复是一个有效的修复问题或一个恶魔隐藏在这个解决方案后面?
>还有其他办法解决问题吗?

任何帮助将不胜感激!?

解决方法

EF 6更改了使用ExecuteSqlCommand的事务

Starting with Entity Framework 6.0,ExecuteSqlCommand() by default will wrap the command in a transaction if one was not already present. There are overloads of this method that allow you to override this behavior if you wish.

EF 5的行为方式不一样.你的修复是适当的

You can now specify a TransactionalBehavior flag to instruct EF on how to handle transactions with this command.

var sqlCommand = String.Format("ALTER DATABASE {0} SET SINGLE_USER 
                                WITH ROLLBACK IMMEDIATE");
db.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction,sqlCommand);

通过使用DoNotEnsureTransaction标志,在执行命令之前,EF不会启动事务.这样可以使ALTER DATABASE命令成功执行.

http://www.danbartram.com/entity-framework-6-and-executesqlcommand/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读