在我的代码中,我已经将EF更新到EF 6.0.2,我有以下代码行:
applicationDbContext.Database .ExecuteSqlCommand(@"ALTER DATABASE
CURRENT SET RECOVERY FULL;");
更新后,我收到以下错误消息:
多语句事务中不允许使用
ALTER DATABASE语句。
我已经用如下代码的TransctionalBehavior修复了这个问题:
applicationDbContext.Database.ExecuteSqlCommand(
TransactionalBehavior.DoNotEnsureTransaction, @"ALTER DATABASE CURRENT SET RECOVERY FULL;");
我的问题是:
如有任何帮助,将不胜感激!?
发布于 2014-06-22 02:36:38
EF 6改变了事务与ExecuteSqlCommand的使用
从Entity Framework6.0开始,ExecuteSqlCommand()默认情况下会将命令包装在事务中(如果还不存在的话)。此方法的重载允许您根据需要重写此行为。
EF5则不是这样的。您的修复是适当的。
您现在可以指定一个TransactionalBehavior标志来指示EF如何使用此命令处理事务。
var sqlCommand = String.Format("ALTER DATABASE {0} SET SINGLE_USER
WITH ROLLBACK IMMEDIATE");
db.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction,
sqlCommand);
通过使用DoNotEnsureTransaction标志,EF在执行命令之前不会启动事务。这允许ALTER DATABASE命令成功执行。
发布于 2016-10-13 18:50:15
如果您使用代码优先方法,可能的解决方案是
public partial class AlterDatabase : DbMigration
{
public override void Up()
{
Sql("ALTER DATABASE CURRENT SET RECOVERY FULL", true);
}
public override void Down()
{
}
}
https://stackoverflow.com/questions/21699075
复制相似问题