Linq多表操作中事務的應用
linq中單表的操作本來是通過自身的事務處理操作的,但是,多個表之間的數據同步操作就不行了。我們也
可以用sql中的事務機製,其實也是一個道理。
我們要使用TransactionScope,必須添加System.Transactions.dll引用。
①我們先看一個可以正確插入的例子:
using (TransactionScope scope = new TransactionScope())
{
M_Test_QBank_Choose m = new M_Test_QBank_Choose();
m.QContent = "111";
m.LessonNum = "111";
m.Answer = "111";
m.AnswerIndex = "111";
m.TeacherID = "10000";
BLL.M_Test_QBank_ChooseBLL.Insert(m); // insert方法裏麵已經submitChanges
int a = m.id;
scope.Complete();
}
a可以拿到插入的記錄的id。
②我們來模擬一個插入出錯的情景:
using (TransactionScope scope = new TransactionScope())
{
M_Test_QBank_Choose m = new M_Test_QBank_Choose();
m.QContent = "111";
m.LessonNum = "111";
m.Answer = "111";
m.AnswerIndex = "111";
m.TeacherID = "10000";
BLL.M_Test_QBank_ChooseBLL.Insert(m);
int a = m.id;
int b = Convert.ToInt32("aaa");
scope.Complete();
}
a可以拿到插入的記錄,但是下麵出錯,就會回滾,數據庫中不會有插入的記錄。
這裏的scope.Complete();會將裏麵的多個表的操作同時提交。如果不成功則會自動回滾。
關於Linq事務的詳細說明,請參見我新浪博客轉載的文章《Linq to SQL 事務》
https://blog.sina.com.cn/s/blog_67aaf4440100sbyb.html
關於使用時提示,請參見我的新浪博客:《MSDTC不可用解決辦法》
https://blog.sina.com.cn/s/blog_67aaf4440100wo3z.html
最後更新:2017-04-02 06:52:24