使用SQL服务器分析器进行分析:EF 6使用BEGIN TRAN
和COMMIT TRAN
包装每个存储过程调用。
这不是一个突破性的变化吗?
也许这不仅是一个突破性的变化,而且使得SPs中的任何事务逻辑都不可能,因为我们永远无法使用ROLLBACK TRAN
在存储过程中回滚我们的事务(注意:SQL服务器中没有嵌套事务),所以一次回滚回滚到@@TRANCOUNT
零。因为我们在事务中,因为EF 6,我们得到了“EXECUTE后的事务计数表示BEGIN和COMMIT语句的数量不匹配。上一个计数=1,当前计数=0。”标准SQL服务器错误。
请不要问我为什么要调用存储过程。我有数百个,它们都使用TRY... COMMIT... CATCH ROLLBACK
逻辑。
有什么想法吗,我怎么才能阻止英孚6这样做?
正如crokusek所说,您可以设置该标志来禁用SP的事务。
如果您使用的是任何依赖项注入(DI)库,您可以这样设置(我使用的是简单的注入器):
public partial class Startup
{
public Container ConfigureSimpleInjector(IAppBuilder app)
{
var container = new Container();
// Configure OWIN and Identity Framework
...
// Configure persistence
container.RegisterPerWebRequest<FakeDbContext>(() =>
{
var fakeDbContext = new FakeDbContext();
fakeDbContext.Configuration.EnsureTransactionsForFunctionsAndCommands = false;
return fakeDbContext;
}
// Register other services
...
container.Verify();
// For MVC
DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
return container;
}
}
在EF 6.1.2中,标志控制行为。将EnsureTransactionsForFunctionsAndCommands设置为false将影响已导入实体的SP(这些SP在内部调用ExecuteFunction()。
using (SomeEf6Context ctx = NewContext())
{
ctx.Configuration.EnsureTransactionsForFunctionsAndCommands = false;
// Call an imported SP
}
该设置不会影响任何SaveChanges()调用。
MSDN链接
EXECUTESQLCOMAND方法的重载阻止了这种行为:
db.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction, sql, parameters);
我正在使用jdb dubugger,它的问题是在每个捕获到的异常上都会停止,尽管我没有执行任何捕获。。。。声明。在类加载过程中,有数百个: 发生异常:java。io。FileNotFoundException(uncaught)“thread=thread-2-EmulatorEngine”,sun。其他。URLClassPath$JarLoader。ensureOpen(),行=634 bci=
首先,问题陈述:我在我的开发环境中使用Spring-Batch很好。当我将代码移动到生产环境时,我遇到了一个问题。在我的开发环境中,Spring-Batch能够在我们的DB2数据库服务器中创建它的事务数据表。当我们去PROD时,这不是一个选项,因为这是一个只读的工作。 尝试的解决方案: 所以我不知道在这里做什么。我刚到Spring,所以我边走边自学。我对其他解决方案持开放态度,比如内存数据库,但我
问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’
问题内容: 我有一个需要很多参数的插入存储过程-其中2个是@ FirstName,@ LastName。我还有一个更新存储过程,该过程需要许多参数-其中2个是@ FirstName,@ LastName。 我想做的是,从插入SP内部完成之后,调用更新SP并将其发送给@ FirstName,@ LastName。 我不知道这样做的正确语法;我试过了: 但我认为这是错误的。 有人可以告诉我怎么写这个电
问题内容: 我在任何地方都找不到此答案,但是可以从MySQL中的另一个存储过程调用存储过程吗?我想找回标识值,并在父存储过程中使用它。我们不能再使用FUNCTIONS! 问题答案: 参数应该可以帮助您将值返回给调用过程。基于此,解决方案必须是这样的。
我正在使用Spring Framework进行数据库调用。我有一个更新,涉及调用2个存储过程,每个过程都在执行多个操作。 我在每个SP中分别定义了以下事务管理: 如果我单独调用每个SP,这可以正常工作,但我想在一个事务中完成整个操作,因此如果对第一个SP的调用有效,但对第二个SP的调用失败,它会同时回滚两者。 所以很明显,我需要从sps中删除提交并在Spring端处理它。 目前对于Spring,我