DataContext.SubmitChanges可能涉及多个entity object的更新,在实际应用中,一起提交若干记录的更新有两种情况:
1) 需要事务完整约束的,如销售++,库存--
2) 不需要事务约束的。如程序运行时把产生的日志放到cache里,由专门负责日志持久化的Thread每隔一段时间把Cache里的多条日志提交保存。
DataContext.SubmitChanges(ConflictMode)可通过指定ConflictMode来满足上面的两种情况:
ConflictMode取值 | 说明 |
FailOnFirstConflict | 默认参数,一旦发生ChangeConflictException,停止SubmitChanges操作,回滚所有SubmitChanges执行的操作。满足情况1) |
ContinueOnConflict | 当发生ChangeConflictException时,继续执行下一个对象的更新操作,直至所有对象都更新完毕,返回所有发生的ChangeConflictException。满足情况2) |
除了让DataContext.SubmitChanges隐式创建事务外,我们也可以显式使用事务来控制更新操作。下面两段代码分别示例了显示事务的使用:
IDbTransaction version:
01 var context = GenerateContext();
02 Customer customerA = new Customer { CustomerID = "K.K" };
03 Customer customerB = new Customer { CustomerID = "K.K" };
04 context.Customers.InsertOnSubmit(customerA);
05 context.Customers.InsertOnSubmit(customerB);
06 context.Transaction = context.Connection.BeginTransaction();
07
08 try
09 {
10 context.SubmitChanges();
11 context.Transaction.Commit();