您的位置:首页 > 其它

CRL快速开发框架系列教程七(使用事务)

2016-11-22 20:54 519 查看

本系列目录

CRL快速开发框架系列教程一(Code First数据表不需再关心)

CRL快速开发框架系列教程二(基于Lambda表达式查询)

CRL快速开发框架系列教程三(更新数据)

CRL快速开发框架系列教程四(删除数据)

CRL快速开发框架系列教程五(使用缓存)

CRL快速开发框架系列教程六(分布式缓存解决方案)

CRL快速开发框架系列教程七(使用事务)

CRL快速开发框架系列教程八(使用CRL.Package)

CRL快速开发框架系列教程九(导入/导出数据)

CRL快速开发框架系列教程十(导出对象结构)

CRL快速开发框架系列教程十一(大数据分库分表解决方案)

CRL快速开发框架系列教程十二(MongoDB支持)

CRL快速开发框架系列教程十三(嵌套查询)

正文

使用事物是一个比较头疼的事,业务方法各种穿插,一般使用数据库事务,那就意味着在调用事务时,需要传递数据访问上下文(新版已经不需要传递了,自动识别)

还有一种解决方案使用TransactionScope,使代码块成为事务,虽然没有直接使用数据库事务高效,但方便,容易开发

CRL默认为此事务

什么都不用传,真方便

方法定义

public bool PackageTrans(TransMethod method, out string error)

在方法体内随便写,返回成功或失败以控制事务

//简化了事务写法,自动提交回滚
return PackageTrans((out string ex) =>
{
ex = "";
var product = new ProductData();
product.BarCode = "code" + DateTime.Now.Millisecond;
product.Number = 10;
ProductDataManage.Instance.Add(product);
return false; //会回滚
}, out error);


同时也提供了数据库的事务,不能跨库

方法定义

public bool PackageTrans2( TransMethod method, out string error)

把操作写在方法体里就行了,由框架自动控制数据访问对象,不能跨库

//简化了事务写法,自动提交回滚
return PackageTrans2((out string ex) =>
{
ex = "";
var product = new ProductData();
product.BarCode = "code" + DateTime.Now.Millisecond;
product.Number = 10;
ProductDataManage.Instance.Add(product);
return false; //会回滚
}, out error);


在面对象开发中,不可能一直带着数据访问上下文的尾巴,为了省事,使用第一种方式吧,简便无优!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: