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; }
}
}
}