using Ant.Core; using Ant.Core.Visitors; using Ant.Data; using Ant.DbExpressions; using Ant.Descriptors; using Ant.Entity; using Ant.Exceptions; using Ant.Infrastructure; using Ant.ORM; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using System.Transactions; namespace Ant.SqlServer { /// /// /// public class MsSqlContext : DbContext { DbContextServiceProvider _dbContextServiceProvider; public MsSqlContext() { this.PagingMode = PagingMode.ROW_NUMBER; this._dbContextServiceProvider = new DbContextServiceProvider(PagingMode); } /// /// 数据库配置 /// public string ConnectionString { get; set; } /// /// 数据库类型 /// public override DatabaseType DatabaseType { get { return DatabaseType.MSSQLServer; } } /// /// 数据库配置 /// public override DataAccess db { get { return new MSSqlDataAccess(ConnectionString); } } /// /// 开启事务 /// public void BeginTransaction() { db.BeginTransaction(); } /// /// 提交事务 /// public void Commit() { db.Commit(); } /// /// 回滚事务 /// public void RollBack() { db.RollBack(); } /// /// 调用说明 /// public bool DataAcessPackageTrans(out string error) //{ // var db = DBExtend; // //简化了事务写法,自动提交回滚 // return DataAcessPackageTrans(db,(out string ex) => // { // ex = ""; // var product = new ProductData(); // product.BarCode = "code" + DateTime.Now.Millisecond; // product.Number = 10; // db.InsertFromObj(product); // return false; //会回滚 // }, out error); //} /// 使用DbTransaction封装事务(不推荐) /// /// /// /// /// public bool DataAcessPackageTrans(DataAccess sqldb, TransMethod method, out string error) { error = ""; sqldb.BeginTransaction(); try { var a = method(out error); if (!a) { sqldb.RollBack(); return false; } sqldb.Commit(); } catch (Exception ero) { error = "提交事务时发生错误:" + ero.Message; sqldb.RollBack(); return false; } return true; } /// /// 调用说明 /// public bool TransactionTest(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); //} /// 使用TransactionScope封装事务[基本方法]分布式事务 /// /// /// /// public bool PackageTrans(TransMethod method, out string error) { error = ""; using (var trans = new TransactionScope()) { try { var a = method(out error); if (!a) { return false; } trans.Complete(); } catch (Exception ero) { error = "提交事务时发生错误:" + ero.Message; return false; } } return true; } /// /// 数据库分页类型(SQL2005或者2008下,使用ROW_NUMBER()分页)(SQL2012下,使用OFFSET/FETCH NEXT分页) /// public PagingMode PagingMode { get; set; } /// /// 创建用哪种数据库解析SQL语句 /// public override IDbContextServiceProvider DbContextServiceProvider { get { return this._dbContextServiceProvider; } } } }