我们插入两条相同的数据,并分别更新两条数据,两条数据,都带有事务功能,代码如下:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading;
- namespace CodeFirstDemo
- {
- #region - 版 权 信 息 -
- //======================================================
- //
- // 创 建 人:小渣渣
- // 创建时间:2017/04/08 08:55:47
- // 邮 箱:help@itsvse.com
- // 个人网站:http://www.itsvse.com
- // 功 能:
- // 修改纪录:
- //
- //======================================================
- #endregion
- class Program
- {
- static void Main(string[] args)
- {
- Console.WriteLine("作者 www.itsvse.com #小渣渣 !");
- TestDb db = new TestDb();
- if (!db.Tab1.Any(x => x.Id == 1))
- {
- db.Tab1.Add(new Tab1()
- {
- Name = "小明",
- Remark = "备注"
- });
- }
- if (!db.Tab1.Any(x => x.Id == 2))
- {
- db.Tab1.Add(new Tab1()
- {
- Name = "小明",
- Remark = "备注"
- });
- }
- db.SaveChanges();
- Console.WriteLine("插入基础数据成功!");
- Console.ReadKey(true);
- using (var db1 = new TestDb())
- {
- using (var tran = db1.Database.BeginTransaction())
- {
- try
- {
- string sql = "UPDATE [Tab1] SET Name='测试' WHERE Id=1";
- db1.Database.ExecuteSqlCommand(sql);
- db1.SaveChanges();
- //处理业务
- tran.Commit();
- }
- catch (Exception ex)
- {
- tran.Rollback();
- }
- }
- }
- Console.WriteLine(db.Tab1.Single(x => x.Id == 1).Name);
- using (var db2 = new TestDb())
- {
- using (var tran = db2.Database.BeginTransaction())
- {
- try
- {
- string sql = "UPDATE [Tab1] SET Name='测试' WHERE Id=2";
- db2.Database.ExecuteSqlCommand(sql);
- db2.SaveChanges();
- //处理业务
- throw new Exception("test");
- tran.Commit();
- }
- catch (Exception ex)
- {
- tran.Rollback();
- }
- }
- }
- Console.WriteLine(db.Tab1.Single(x => x.Id == 2).Name);
- Console.WriteLine("success!");
- Console.ReadKey();
- }
- }
- }
复制代码我们让第一个事务里面能够正常执行业务逻辑代码;
我们让第二个事务里面故意抛出异常,看是否能正常回滚。
测试结果,事务一没有异常,更新成功;事务二,抛出异常,更新失败,并且回滚。
源码下载:
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。