[置顶] 如何用ObjectContext来完成事务

 有时我们需要从应用程序层中提交多个sql语句到数据库,每条sql都建立一次sql连接是低效的,所以尽量能一次连接完成所有操作就在一次连接中实现,并且希望能在某个sql操作失败的情况下保证所有sql语句都回滚,我们可以有2个方法来实现.
1)使用同一个ObjectContext对象来统一提交命令,如下:
下例由于ItemID主键冲突,后一条数据都不会被插入

myContext context1 = new myContext();

DBItem item1 = new DBItem();

item1.ItemID = "w";

item1.ItemMatter = "wxwinter";

context1.AddObject("DBItem", item1);

context1.SaveChanges();

myContext context2 = new myContext();

DBItem item2 = new DBItem();

item2.ItemID = "w";

item2.ItemMatter = "wxd";

context2.AddObject("DBItem", item2);

context2.SaveChanges();
 
2.使用TransactionScope 事务(两个Context),示例如下:
下例由于ItemID主键冲突,两条数据都不会被插入

using (System.Transactions.TransactionScope tc = new TransactionScope())

{

try

{

myContext context1 = new myContext();

DBItem item1 = new DBItem();

item1.ItemID = "w";

item1.ItemMatter = "wxwinter";

context1.AddObject("DBItem", item1);

context1.SaveChanges();

myContext context2 = new myContext();

DBItem item2 = new DBItem();

item2.ItemID = "w";

item2.ItemMatter = "wxd";

context2.AddObject("DBItem", item2);

context2.SaveChanges();

tc.Complete();

}

catch

{

}

}
 

你可能感兴趣的:(sql,数据库)