当前位置:  开发笔记 > 编程语言 > 正文

使用LINQ-to-SQL从事务内部回滚存储过程调用?

如何解决《使用LINQ-to-SQL从事务内部回滚存储过程调用?》经验,为你挑选了1个好方法。

我有一个C#.net winform程序,它运行SQL Server数据库.我正在使用LINQ-to-SQL.是否可以使用LINQ-to-SQL将调用回滚到程序中的事务内的一个或多个存储过程?

最初我认为管理存储过程中的事务是有意义的,但如果我需要回滚多个存储过程调用作为单个事务的一部分,则需要在我的C#程序中完成.

有人能指出我如何做到这一点或提供一些替代方案的代码片段吗?



1> Marc Gravell..:

另一个替代方案DbTransactionTransactionScope- 这提供了一个更简单的编程模型,并且可以扩展到多个同时的数据库和其他提要(通过DTC) - 但是以连接上的少量开销为代价.它曾经是更多的开销,但在SQL2005等之下它将使用"LTM"直到您开始跨越多个连接 - 所以单个操作通常非常便宜:

using (TransactionScope tran = new TransactionScope())
using (FooDataContext ctx = new FooDataContext())
{
    // your work with ctx
    // ...
    // other work involving connections etc
    // ...
    tran.Complete();
}

非常简单;-p您还应该能够使事务更精细(仅通过几个查询)或更简单地包含.大多数现有代码将自动登记在事务范围内,使得很容易适应现有代码.

有关TransactionScope(以及.NET中的常规事务)的更多信息,请参见此处.


只是想澄清一点,如果它不明显:"Complete方法提交事务.如果抛出异常,则不调用complete,并回滚事务." (从上面的第一个链接)所以不要去寻找'rollback()'并且没有任何没有Complete()的'return'代码路径
推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有