C#学习教程:在SQLAzure上调用execsp并使用EF6抛出时存储过程工作正常sp_RebuildIndexes]ASBEGINDECLARE@TableNamevarchar(255)DECLARETableCursorCURSORFOR(SELECT'['+IST.TABLE_SCHEMA+'].['+IST.table_name+']'AS[TableName]FROMINFORMATION_SCHEMA.TABLESISTWHEREIST。TABLE_TYPE='BASETABLE')OPENTableCursorFETCHNEXTFROMTableCursorINTO@TableNameWHILE@@fetch_status=0BEGINPRINT('重建索引'+@TableName)BEGINTRYEXEC('ALTERINDEXALLON'+@TableName+'REBUILDwith(ONLINE=ON)')ENDTRYBEGINCATCHPRINT('CannotdorebuildwithOnline=Onoption,takingtable'+@TableName+'downfordoingrebuild')EXEC('ALTERINDEXALLON'+@TableName+'REBUILD')ENDCATCHFETCHNEXTFROMTableCursorINTO@TableNameENDCLOSETableCursorDEALLOCATETableCursorEND如果我用SQLqueryexec[dbo].[sp_RebuildIndexes]执行它,它工作正常。现在使用此代码从EF6调用它会抛出SQLAzure,但适用于localdb:varsqlConnection=(SqlConnection)_context.Database.Connection;sqlConnection.InfoMessage+=(s,m)=>消息=m.Message;_context.Database.ExecuteSqlCommand("exec[dbo].[sp_RebuildIndexes]");异常:当前事务无法提交,不支持写入日志文件的操作。回滚事务。当前事务无法提交,不支持写入日志文件的操作。回滚事务。当前事务无法提交,不支持写入日志文件的操作。回滚事务。在批处理结束时检测到不可提交的事务。事务被回滚。[SqlException(0x80131904):当前事务无法提交,不支持写入日志文件的操作。回滚事务。你知道哪里出了问题吗?编辑:仅当无法使用ONLINE=ON重建索引时才会出现此问题编辑2:如果我将此sp与SqlC一起使用onnection对象和它的工作最后这里是修复:我怀疑是事务问题,经过一些调查问题是:如果你在这里看http://msdn.microsoft.com/en-us/data/dn456843从EF6开始Database.ExecuteSqlCommand()默认情况下会将命令包装在事务中(如果它尚不存在)。此方法的重载允许您根据需要覆盖此行为。同样在EF6中,通过API(例如ObjectContext.ExecuteFunction())执行模型中包含的存储过程会做同样的事情(除非此时您不能覆盖默认行为)。所以替换_context.Database.ExecuteSqlCommand("exec[dbo].[sp_RebuildIndexes]");with_context.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction,"exec[dbo].[sp_RebuildIndexes]");它有效!以上是C#学习教程:在SQLAzure上调用execsp,使用EF6抛出,存储过程正常。如果对你有用,需要进一步了解C#学习教程,希望大家多加关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
