温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

LINQ to SQL事务模型有哪些

发布时间:2021-12-01 10:14:38 来源:亿速云 阅读:108 作者:小新 栏目:编程语言

这篇文章主要介绍了LINQ to SQL事务模型有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

三种LINQ to SQL事务模型,分别是:
◆显式本地事务:调用 SubmitChanges 时,如果 Transaction 属性设置为事务,则在同一事务的上下文中执行 SubmitChanges 调用。成功执行事务后,要由您来提交或回滚事务。与事务对应的连接必须与用于构造 DataContext 的连接匹配。如果使用其他连接,则会引发异常。
◆显式可分发事务:可以在当前 Transaction 的作用域中调用 LINQ to SQL API(包括但不限于 SubmitChanges)。LINQ to SQL 检测到调用是在事务的作用域内,因而不会创建新的事务。在这种情况下,<token>vbtecdlinq</token> 还会避免关闭连接。您可以在此类事务的上下文中执行查询和 SubmitChanges 操作。
◆隐式事务:当您调用 SubmitChanges 时,LINQ to SQL 会检查此调用是否在 Transaction 的作用域内或者 Transaction 属性是否设置为由用户启动的本地事务。如果这两个事务它均未找到,则 LINQ to SQL 启动本地事务,并使用此事务执行所生成的 SQL 命令。当所有 SQL 命令均已成功执行完毕时,LINQ to SQL 提交本地事务并返回。

1.Implicit(隐式)

说明:这个例子在执行SubmitChanges()操作时,隐式地使用了事务。因为在更新2种产品的库存数量时,第二个产品库存数量为负数了,违反了服务器上的 CHECK 约束。这导致了更新产品全部失败了,系统回滚到这个操作的初始状态。

try  {  Product prod1 = db.Products.First(p => p.ProductID == 4);  Product prod2 = db.Products.First(p => p.ProductID == 5);  prod1.UnitsInStock -= 3;  prod2.UnitsInStock -= 5;//错误:库存数量的单位不能是负数  //要么全部成功要么全部失败  db.SubmitChanges();  }  catch (System.Data.SqlClient.SqlException e)  {  //执行异常处理  }

2.Explicit(显式)

说明:这个例子使用显式事务。通过在事务中加入对数据的读取以防止出现开放式并发异常,显式事务可以提供更多的保护。如同上一个查询中,更新 prod2 的 UnitsInStock 字段将使该字段为负值,而这违反了数据库中的 CHECK 约束。这导致更新这两个产品的事务失败,此时将回滚所有更改。以上介绍LINQ to SQL事务模型

using (TransactionScope ts = new TransactionScope())  {  try  {  Product prod1 = db.Products.First(p => p.ProductID == 4);  Product prod2 = db.Products.First(p => p.ProductID == 5);  prod1.UnitsInStock -= 3;  prod2.UnitsInStock -= 5;//错误:库存数量的单位不能是负数  db.SubmitChanges();  }  catch (System.Data.SqlClient.SqlException e)  {  //执行异常处理  }  }

感谢你能够认真阅读完这篇文章,希望小编分享的“LINQ to SQL事务模型有哪些”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI