EF 自带事务
来源:互联网 发布:java 树形菜单 递归 编辑:程序博客网 时间:2024/04/30 15:39
通过反编译可以看到单实例DbContext的SaveChanges方式默认开启了事务,当同时更新多条记录时,有一条失败就会RollBack。模拟测试代码
using System;using System.Collections.Generic;using System.Linq;using System.Text;using EF.Model;using EF.DAL;using System.Data.Entity;using System.Collections;using System.Transactions;namespace EF.Demo{ class Program { static void Main(string[] args) { BlogCategory cate = null; DemoDBEntities context = new DemoDBEntities(); //DemoDBEntities context2 = new DemoDBEntities(); try { //using (TransactionScope scope = new TransactionScope()) //{ //context.Configuration.LazyLoadingEnabled = false; DbSet<BlogCategory> set = context.Set<BlogCategory>(); cate = new BlogCategory(); cate.CateName = "2010-7"; cate.CreateTime = DateTime.Now; cate.BlogArticle.Add(new BlogArticle() { Title = "2011-7-15" }); set.Add(cate); //由于没设置Title字段,并且CreateTime字段不能为空,故会引发异常 context.Set<BlogArticle>().Add(new BlogArticle { BlogCategory_CateID = 2 }); int a = context.SaveChanges(); // context2.Set<BlogArticle>().Add(new BlogArticle { BlogCategory_CateID = 2 }); // int b = context2.SaveChanges(); // scope.Complete(); //} } catch(Exception ex) { Console.WriteLine(ex.Message); } Console.ReadLine(); } } }
通过SQL SERVER Profile 监视到没有一句SQL语句被执行,SaveChanges事务是预执新所有操作成功后才会更新到数据库中。
我们再来测试一下分布式事务,创建的Context2用于模拟代表其它数据库
using System;using System.Collections.Generic;using System.Linq;using System.Text;using EF.Model;using EF.DAL;using System.Data.Entity;using System.Collections;using System.Transactions;namespace EF.Demo{ class Program { static void Main(string[] args) { BlogCategory cate = null; DemoDBEntities context = new DemoDBEntities(); DemoDBEntities context2 = new DemoDBEntities(); try { using (TransactionScope scope = new TransactionScope()) { //context.Configuration.LazyLoadingEnabled = false; DbSet<BlogCategory> set = context.Set<BlogCategory>(); cate = new BlogCategory(); cate.CateName = "2010-7"; cate.CreateTime = DateTime.Now; cate.BlogArticle.Add(new BlogArticle() { Title = "2011-7-15" }); set.Add(cate); //实例1 对数据库执行提交 int a = context.SaveChanges(); //实例2 模拟其它数据库提交 时间字段为空,无法更新成功 context2.Set<BlogArticle>().Add(new BlogArticle { Title="2011-7-16", BlogCategory_CateID = 2 }); int b = context2.SaveChanges(); scope.Complete(); } } catch(Exception ex) { Console.WriteLine(ex.Message); } Console.ReadLine(); } } }
通过SQL SERVER Profile 监视,虽然context实际执行了两条SQL记录,但是context2的SQL没有执行成功,导致事务回滚,所有操作都被没有执行成功。
0 0
- EF 自带事务
- oracle的自带事务
- ef事务
- EF 事务
- Spring Data Jpa 自带事务配置
- EF操作-事务
- EF Code-First中的事务
- WCF分布式事务(EF)
- ef 事务 的一种处理方法
- sqlite&ef中处理自增列
- opensession()和getCurrentSession()方法的区别(JTA(java Transaction Api,分布式事务)事务和Connection事务:数据库自带的事务处理方式)
- SSH配置文件 带事务
- ef
- EF
- EF
- EF
- EF
- EF
- spark内核揭秘-02-spark集群概览
- 简单工厂模式
- spark内核揭秘-01-spark内核核心术语解析
- MDK和keil C51一台电脑共存
- Real-time Operation System Course: 解密字符串
- EF 自带事务
- Android 界面滑动实现---Scroller类 从源码和开发文档中学习(让你的布局动起来)
- OK6410 uboot2013.04-rc1 DM9000移植及tftp配置使用
- android 布局之滑动探究 scrollTo 和 scrollBy 方法使用说明
- 隐藏activity的标题
- 高密度AVS+实时转码设备的研究和实现(转自DVBCN)
- thinkphp ajax
- 字符分割源代码(效果还可以)
- android 布局之滑动探究 scrollTo 和 scrollBy 方法使用说明