本文主要是介绍Linq to sql:事务处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Linq to sql 在提交更新的时候默认会创建事务,一部分修改发生错误的话其它修改也不会生效:
ctx.Customers.Add(new Customer { CustomerID = "abcdf", CompanyName =
"zhuye" });
ctx.Customers.Add(new Customer { CustomerID = "abcde", CompanyName =
"zhuye" });
ctx.SubmitChanges();
假设数据库中已经存在顾客 ID 为“abcde”的记录,那么第二次插入操作失败将会导致第
一次的插入操作失效。执行程序后会得到一个异常,查询数据库发现“abcdf”这个顾客也没
有插入到数据库中。
如果每次更新后直接提交修改,那么我们可以使用下面的方式做事务:
if (ctx.Connection != null) ctx.Connection.Open();
DbTransaction tran = ctx.Connection.BeginTransaction();
ctx.Transaction = tran;
try
{
CreateCustomer(new Customer { CustomerID = "abcdf", CompanyName =
"zhuye" });
CreateCustomer(new Customer { CustomerID = "abcde", CompanyName =
"zhuye" });
tran.Commit();
}
catch
{
tran.Rollback();
}
private void CreateCustomer(Customer c)
{
ctx.Customers.Add(c);
ctx.SubmitChanges();
}
运行程序后发现增加顾客 abcdf 的操作并没有成功。或者,我们还可以通过
TransactionScope 实现事务:
using (TransactionScope scope = new TransactionScope())
{
CreateCustomer(new Customer { CustomerID = "abcdf", CompanyName =
"zhuye" });
CreateCustomer(new Customer { CustomerID = "abcde", CompanyName =
"zhuye" });
scope.Complete();
}
这篇关于Linq to sql:事务处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!