using System; using System.Collections.Generic; using System.Linq; using System.Text; using Ant.Frame; using Ant.Data; using System.Data; using System.Configuration; using System.Reflection; using Ant.Common; using Newtonsoft.Json; using Ant.Descriptors; using Ant.Entity; namespace Ant.ORM { /// /// 实体基类 /// [Serializable] public abstract class EnBaseObj : EntityObject where T : EntityObject, new() { #region 获取单个实体 /// /// 获取单个实体 /// /// 查询条件 /// 返回的是Object类型返回去要进行转换 public override ResponseModel GetEntity(RequestModel request) { return GetEntityEnd(request); } #endregion #region 保存数据 /// /// 保存数据 /// /// public override ResponseModel Save() { return SaveEnd(null); } /// /// 保存数据 /// /// 数据库对象参数 /// public override ResponseModel Save(DataAccess db) { return SaveEnd(db); } #endregion #region 删除数据 /// /// 删除 /// /// public override ResponseModel Delete() { return DeleteEnd("", null); } /// /// /// /// /// public override ResponseModel Delete(DataAccess db) { return DeleteEnd("", db); } /// /// 通过oid删除记录 /// /// /// public override ResponseModel Delete(string oid) { return DeleteEnd(oid, null); } /// /// /// /// /// /// public override ResponseModel Delete(string oid, DataAccess db) { return DeleteEnd(oid, db); } #endregion #region 更新数据集 /// /// 更新自带Where条件的数据 /// /// 更新的数据 /// 更新的条件 /// 连接数据库对象 /// public override ResponseModel UpdateEntity(ResquestUpdateModel enty) { return UpdateEntityEnd(enty); } #endregion #region 获取数据集 /// /// 获取DataTable /// /// /// /// public override ResponseModel GetDtList(RequestModel enty) { return GetDtListEnd(enty); } /// /// 由DataReader转DataTable /// /// /// public override ResponseModel GetDr2DtList(RequestModel enty) { return GetDr2DtListEnd(enty); } /// /// 通过DataReader返回List集合这种效率高 /// /// 显示字段 /// 数据对象 /// 返回Object类型的数据 public override ResponseModel GetDr2EnList(RequestModel enty) { return GetDr2EnListEnd(enty); } /// /// 查询DataTable转换成实体效率不高(要求性不高的情况下使用) /// /// /// public override ResponseModel GetDt2EnList(RequestModel enty) { return GetDt2EnListEnd(enty); } /// /// 获取分页方法 /// /// /// public override ResponseModel GetPageRecordList(RequestModel enty) { return GetPageRecordListEnd(enty); } /// /// 获取分页数据返回DataTable /// /// /// /// public override ResponseModel GetPageRecordDt(RequestModel enty) { return GetPageRecordDtEnd(enty); } /// /// 数据的总记录 /// /// public override ResponseModel Sum() { return SumEnd(); } #endregion #region 最终调用方法 #region 获取分页数据最终方法 /// /// 获取分页数据返回实体集合 /// /// /// private ResponseModel GetPageRecordListEnd(RequestModel request) { var result = new ResponseModel(); QueryCommand cmd = new QueryCommand(); var db = request.db; try { System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); //QueryCommandBuilders querycommd = new QueryCommandBuilders(); MetaData md = MetaDataManager.GetMetaData(this);//获取实体的元数据 //if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接 if (db.IsNull()) { result.IsSuccess = false; result.Message = "数据库配置不正确"; return result; } if (request.newSt.IsNull()) { result.IsSuccess = false; result.Message = "备注信息不能为空"; return result; } else { if (request.newSt.NewSt.IsNull()) { result.IsSuccess = false; result.Message = "备注信息不能为空"; return result; } } QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句 qcBuilder.Md = md;//实体属性 qcBuilder.PersistType = EntityPersistType.QueryPage;//操作方式 qcBuilder.PageNo = request.StartNum; qcBuilder.PageSize = request.PageSize; //qcBuilder.SelectField = enty.SelectField; qcBuilder.ShowField = request.ShowField; qcBuilder.Predicate = request.Predicate; cmd = qcBuilder.GetQueryCommand(); System.Diagnostics.StackFrame[] sfs = request.newSt.NewSt.GetFrames(); string sqlWithComment = string.Empty; if (sfs.Count() > 0) { System.Diagnostics.StackFrame infos = sfs[0]; System.Reflection.MethodBase mb = infos.GetMethod(); var filename = infos.GetFileName(); sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", request.newSt.Author, request.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName); } var dt = db.ExecuteDataReader(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters); var objlist = DataToModel.Dr2EnList(dt); sw.Stop(); string str = sw.Elapsed.ToString(); result.IsSuccess = true; result.ResultModel = objlist; result.RecordNum = PageSumEnd(md).RecordNum; result.Message = "查询成功,用时:" + str; return result; } catch (Exception ex) { //LogHelper.WriteExLog(ex); result.IsSuccess = false; result.Message = ex.ToString(); cmd = new QueryCommand(); return result; } finally { result.StrSql = cmd.SqlString; result.DBConfig = db.ConnectionString; if (!db.IsNull()) db.Close(); } } /// /// 获取分页数据 /// /// /// /// //private ResponseTable GetPageRecordDtEnd(string showfield, int startNum, int pageSize) private ResponseModel GetPageRecordDtEnd(RequestModel enty) { DataAccess db = enty.db; QueryCommand cmd = new QueryCommand(); ResponseModel result = new ResponseModel(); try { System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); MetaData md = MetaDataManager.GetMetaData(this);//获取实体的元数据 if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName, DataConfigEnum.WriteData);//创建数据库连接 if (db.IsNull()) { result.IsSuccess = false; result.Message = "数据库配置不正确"; return result; } if (enty.newSt.IsNull()) { result.IsSuccess = false; result.Message = "备注信息不能为空"; return result; } else { if (enty.newSt.NewSt.IsNull()) { result.IsSuccess = false; result.Message = "备注信息不能为空"; return result; } } QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句 qcBuilder.Md = md;//实体属性 qcBuilder.PersistType = EntityPersistType.QueryPage;//操作方式 qcBuilder.PageNo = enty.StartNum; qcBuilder.PageSize = enty.PageSize; //qcBuilder.SelectField = enty.SelectField; qcBuilder.ShowField = enty.ShowField; cmd = qcBuilder.GetQueryCommand(); System.Diagnostics.StackFrame[] sfs = enty.newSt.NewSt.GetFrames(); string sqlWithComment = string.Empty; if (sfs.Count() > 0) { System.Diagnostics.StackFrame infos = sfs[0]; System.Reflection.MethodBase mb = infos.GetMethod(); var filename = infos.GetFileName(); sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", enty.newSt.Author, enty.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName); } DataTable dt = db.ExecuteDataTable(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters); sw.Stop(); string str = sw.Elapsed.ToString(); result.IsSuccess = dt.Rows.Count > 0; result.RecordNum = PageSumEnd(md).RecordNum; result.DataTable = dt; result.Message = "查询返回成功,用时:" + str; return result; } catch (Exception ex) { //LogHelper.WriteExLog(ex); result.IsSuccess = false; result.Message = ex.ToString(); return result; } finally { result.StrSql = cmd.SqlString; result.DBConfig = db.ConnectionString; if (!db.IsNull()) db.Close(); } } /// /// 带分页的统计记录 /// /// /// private ResponseModel PageSumEnd(MetaData md) { DataAccess db = null; ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand(); try { if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接 if (db.IsNull()) { result.IsSuccess = false; result.Message = "数据库配置不正确"; return result; } QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句 qcBuilder.Md = md; qcBuilder.PersistType = EntityPersistType.Sum; cmd = qcBuilder.GetQueryCommand(); var num = db.ExecuteScalar(cmd.CommandText, cmd.Parameters).ToInt32(); result.RecordNum = num; result.IsSuccess = true; result.Message = "返回成功"; } catch (Exception ex) { //LogHelper.WriteExLog(ex); result.IsSuccess = false; result.Message = ex.ToString(); } finally { result.StrSql = cmd.SqlString; result.DBConfig = db.ConnectionString; if (!db.IsNull()) db.Close(); } return result; } /// /// 数据的总记录 /// /// private ResponseModel SumEnd() { DataAccess db = null; ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand(); try { //QueryCommandBuilders querycommd = new QueryCommandBuilders(); MetaData md = MetaDataManager.GetMetaData(this);//获取实体的元数据 if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接 if (db.IsNull()) { result.IsSuccess = false; result.Message = "数据库配置不正确"; return result; } QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句 qcBuilder.Md = md; qcBuilder.PersistType = EntityPersistType.Sum; cmd = qcBuilder.GetQueryCommand(); var num = db.ExecuteScalar(cmd.CommandText, cmd.Parameters).ToInt32(); result.RecordNum = num; result.IsSuccess = true; result.Message = "返回成功"; } catch (Exception ex) { //LogHelper.WriteExLog(ex); result.IsSuccess = false; result.Message = ex.ToString(); } finally { result.StrSql = cmd.SqlString; result.DBConfig = db.ConnectionString; if (!db.IsNull()) db.Close(); } return result; } #endregion /// /// 获取单个实体最终方法 /// /// /// /// /// private ResponseModel GetEntityEnd(RequestModel enty) { System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); T obj = Activator.CreateInstance(); DataAccess db = enty.db; var result = new ResponseModel(); TypeDescriptor md = null; QueryCommand cmd = new QueryCommand(); string sqlWithComment = string.Empty; try { md = TypeDescriptor.ParserMeta(this); //获取实体的元数据 if (md.Fields.Count == 0 && enty.Predicate.IsNull())//主键和查询类都没有赋值这样就不能做这种查询 { result.Message = "所有查询条件都没有,不能查询"; result.IsSuccess = false; return result; } if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName, DataConfigEnum.WriteData);//创建数据库连接 if (db.IsNull()) { result.IsSuccess = false; result.Message = "数据库配置不正确"; return result; } if (enty.newSt.IsNull()) { result.IsSuccess = false; result.Message = "备注信息不能为空"; return result; } else { if (enty.newSt.NewSt.IsNull()) { result.IsSuccess = false; result.Message = "备注信息不能为空"; return result; } } QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType); //构建生成哪种SQL语句 qcBuilder.Md = md; qcBuilder.PersistType = EntityPersistType.Query; qcBuilder.Predicate = enty.Predicate; qcBuilder.Top = "1"; qcBuilder.SqlType = SqlEnum.MainSql; qcBuilder.Sort = enty.Sort; cmd = qcBuilder.GetQueryCommand(); //生成SQL语句和参数 System.Diagnostics.StackFrame[] sfs = enty.newSt.NewSt.GetFrames(); if (sfs.Count() > 0) { System.Diagnostics.StackFrame infos = sfs[0]; System.Reflection.MethodBase mb = infos.GetMethod(); var filename = infos.GetFileName(); sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", enty.newSt.Author, enty.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName); } using (IDataReader rdr = db.ExecuteDataReader(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters)) { obj = DataToModel.Dr2En(rdr); } sw.Stop(); string str = sw.Elapsed.ToString(); result.IsSuccess = obj.IfNotNull(); result.ResultModel = obj; result.Message = "获取实体成功,用时:" + str; return result; } catch (Exception ex) { //LogHelper.WriteExLog(ex); result.IsSuccess = false; result.Message = ex.ToString(); return result; } finally { string showsqlstr = string.Format(@"{0}{1}", cmd.SqlString, sqlWithComment); result.StrSql = showsqlstr; result.DBConfig = db.ConnectionString; if (!db.IsNull()) db.Close(); } } /// /// 判断数据库中是否有值 /// /// 执行的sql查询 /// public bool GetDataHasRows(string comText) { return true; } /// /// 保存数据 /// /// /// private ResponseModel SaveEnd(DataAccess db) { System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand(); string sqlWithComment = string.Empty; try { TypeDescriptor md = TypeDescriptor.ParserMeta(this);//获取实体的元数据 if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接 if (db.IsNull()) { result.IsSuccess = false; result.Message = "数据库配置不正确"; return result; } QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句 qcBuilder.TypeDes = md;//所有实体属性 qcBuilder.PersistType = PersistType; cmd = qcBuilder.GetQueryCommand();//解析SQL语句 result.DBConfig = db.ConnectionString; int num = 0; var location = cmd.CommandText.EndsWith(ConstSql.SQL_SCOPE_IDENTITY, StringComparison.CurrentCultureIgnoreCase); if (location) { num = (!cmd.CommandText.IsEmpty()) ? db.ExecuteScalar(cmd.CommandText, cmd.Parameters).ToInt32() : 0;//执行SQL语句 result.RecordNum = num; } else { num = (!cmd.CommandText.IsEmpty()) ? db.ExecuteNonQuery(cmd.CommandText, cmd.Parameters).ToInt32() : 0; } result.IsSuccess = num > 0; sw.Stop(); string str = sw.Elapsed.ToString(); result.Message = "保存成功,用时:" + str; sw = null; } catch (Exception ex) { //LogHelper.WriteExLog(ex); result.IsSuccess = false; result.Message = ex.ToString(); } finally { string showsqlstr = string.Format(@"{0}{1}", cmd.SqlString, sqlWithComment); result.StrSql = showsqlstr; if (db.IfNotNull()) db.Close(); } return result; } /// /// 删除最终方法 /// /// /// /// private ResponseModel DeleteEnd(string oid, DataAccess db) { ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand(); try { System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); TypeDescriptor md = null; if (oid.IsEmpty()) { md = TypeDescriptor.ParserMeta(this); //获取实体的元数据 } else { md = TypeDescriptor.GetDescriptor(typeof(T)); //获取实体的元数据 md.ModuleName = Activator.CreateInstance().ModuleName; md.WhereSql = ModPerkey(md.PrimaryKey.Column.Name, oid); //自定义查询条件 } if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接 if (db.IsNull()) { result.IsSuccess = false; result.Message = "数据库配置不正确"; return result; } QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句 qcBuilder.TypeDes = md; qcBuilder.PersistType = EntityPersistType.Delete; cmd = qcBuilder.GetQueryCommand(); int num = db.ExecuteNonQuery(cmd.CommandText, cmd.Parameters);//执行SQL语句 sw.Stop(); string str = sw.Elapsed.ToString(); result.IsSuccess = num > 0; result.Message = "删除成功,用时:" + str; sw = null; } catch (Exception ex) { //LogHelper.WriteExLog(ex); // result.IsSuccess = false; result.Message = ex.ToString(); } finally { result.StrSql = cmd.SqlString; result.DBConfig = db.ConnectionString; if (!db.IsNull()) db.Close(); } return result; } /// /// 获取DataTable转List的方法 /// /// /// /// private ResponseModel GetDtListEnd(RequestModel enty) { var result = new ResponseModel(); DataAccess db = enty.db; QueryCommand cmd = new QueryCommand(); try { System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); TypeDescriptor md = TypeDescriptor.ParserMeta(this);//获取实体的元数据 if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接 if (db.IsNull()) { result.IsSuccess = false; result.Message = "数据库配置不正确"; return result; } if (enty.newSt.IsNull()) { result.IsSuccess = false; result.Message = "备注信息不能为空"; return result; } else { if (enty.newSt.NewSt.IsNull()) { result.IsSuccess = false; result.Message = "备注信息不能为空"; return result; } } QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句 qcBuilder.TypeDes = md; //qcBuilder.SelectField = enty.SelectField; qcBuilder.ShowField = enty.ShowField; if (enty.TopNum > 0) qcBuilder.Top = enty.TopNum.ToString(); qcBuilder.PersistType = EntityPersistType.Query;//操作方式 cmd = qcBuilder.GetQueryCommand(); DataTable dt = new DataTable(); System.Diagnostics.StackFrame[] sfs = enty.newSt.NewSt.GetFrames(); string sqlWithComment = string.Empty; if (sfs.Count() > 0) { System.Diagnostics.StackFrame infos = sfs[0]; System.Reflection.MethodBase mb = infos.GetMethod(); var filename = infos.GetFileName(); sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", enty.newSt.Author, enty.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName); } dt = db.ExecuteDataTable(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters); sw.Stop(); string str = sw.Elapsed.ToString(); result.IsSuccess = dt.IsHaveRows(); result.DataTable = dt; result.Message = string.Format("返回数据成功记录数:{0}耗时:{1}", dt.Rows.Count, str); sw = null; return result; } catch (Exception ex) { //LogHelper.WriteExLog(ex); result.IsSuccess = false; result.Message = ex.ToString(); return result; } finally { result.StrSql = cmd.SqlString; result.DBConfig = db.ConnectionString; if (!db.IsNull()) db.Close(); } return result; } /// /// 由DataReader转DataTable /// /// /// private ResponseModel GetDr2DtListEnd(RequestModel enty) { var result = new ResponseModel(); DataAccess db = enty.db; QueryCommand cmd = new QueryCommand(); string sqlWithComment = string.Empty; try { System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); TypeDescriptor md = TypeDescriptor.ParserMeta(this);//获取实体的元数据 if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接 if (db.IsNull()) { result.IsSuccess = false; result.Message = "数据库配置不正确"; return result; } if (enty.newSt.IsNull()) { result.IsSuccess = false; result.Message = "备注信息不能为空"; return result; } else { if (enty.newSt.NewSt.IsNull()) { result.IsSuccess = false; result.Message = "备注信息不能为空"; return result; } } QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句 qcBuilder.TypeDes = md; //qcBuilder.SelectField = enty.SelectField; qcBuilder.ShowField = enty.ShowField; if (enty.TopNum > 0) qcBuilder.Top = enty.TopNum.ToString(); qcBuilder.PersistType = EntityPersistType.Query;//操作方式 cmd = qcBuilder.GetQueryCommand(); DataTable dt = new DataTable(); //dt = db.ExecuteDataTable(cmd.CommandText, cmd.Parameters); //sw.Stop(); //string str = sw.Elapsed.ToString(); System.Diagnostics.StackFrame[] sfs = enty.newSt.NewSt.GetFrames(); if (sfs.Count() > 0) { System.Diagnostics.StackFrame infos = sfs[0]; System.Reflection.MethodBase mb = infos.GetMethod(); var filename = infos.GetFileName(); sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", enty.newSt.Author, enty.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName); } using (IDataReader rdr = db.ExecuteDataReader(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters)) { dt = DataToModel.Dr2Dt(rdr); } sw.Stop(); string str = sw.Elapsed.ToString(); result.IsSuccess = dt.IsHaveRows(); result.DataTable = dt; result.Message = string.Format("返回数据成功记录数:{0}耗时:{1}", dt.Rows.Count, str); return result; } catch (Exception ex) { //LogHelper.WriteExLog(ex); result.IsSuccess = false; result.Message = ex.ToString(); return result; } finally { string showsqlstr = string.Format(@"{0}{1}", cmd.SqlString, sqlWithComment); result.StrSql = showsqlstr; result.DBConfig = db.ConnectionString; if (!db.IsNull()) db.Close(); } return result; } /// /// 通过DataReader返回List集合这种效率高 /// /// 显示字段 /// 数据对象 /// 返回Object类型的数据 private ResponseModel GetDr2EnListEnd(RequestModel enty) { var result = new ResponseModel(); DataAccess db = enty.db; QueryCommand cmd = new QueryCommand(); try { System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); TypeDescriptor md = TypeDescriptor.ParserMeta(this);//获取实体的元数据 if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接 if (db.IsNull()) { result.IsSuccess = false; result.Message = "数据库配置不正确"; return result; } if (enty.newSt.IsNull()) { result.IsSuccess = false; result.Message = "备注信息不能为空"; return result; } else { if (enty.newSt.NewSt.IsNull()) { result.IsSuccess = false; result.Message = "备注信息不能为空"; return result; } } QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句 qcBuilder.TypeDes = md; //qcBuilder.SelectField = enty.SelectField; qcBuilder.ShowField = enty.ShowField; if (enty.TopNum > 0) qcBuilder.Top = enty.TopNum.ToString(); qcBuilder.PersistType = EntityPersistType.Query;//操作方式 cmd = qcBuilder.GetQueryCommand(); List objlist = new List(); System.Diagnostics.StackFrame[] sfs = enty.newSt.NewSt.GetFrames(); string sqlWithComment = string.Empty; if (sfs.Count() > 0) { System.Diagnostics.StackFrame infos = sfs[0]; System.Reflection.MethodBase mb = infos.GetMethod(); var filename = infos.GetFileName(); sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", enty.newSt.Author, enty.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName); } using (IDataReader rdr = db.ExecuteDataReader(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters)) { objlist = DataToModel.Dr2EnList(rdr); } sw.Stop(); string str = sw.Elapsed.ToString(); result.IsSuccess = objlist.Count > 0; if (result.IsSuccess) { result.ResultModel = objlist; result.Message = string.Format("返回数据成功记录数:{0}耗时:{1}", objlist.Count, str); } else { result.Message = "返回失败"; result.StrSql = cmd.SqlString; } return result; } catch (Exception ex) { //LogHelper.WriteExLog(ex); result.IsSuccess = false; result.Message = ex.ToString(); return result; } finally { result.DBConfig = db.ConnectionString; if (!db.IsNull()) db.Close(); } } /// /// 查询DataTable转换成实体效率不高(要求性不高的情况下使用) /// /// /// /// private ResponseModel GetDt2EnListEnd(RequestModel enty) { var result = new ResponseModel(); DataAccess db = enty.db; QueryCommand cmd = new QueryCommand(); string sqlWithComment = string.Empty; try { System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); //QueryCommandBuilders querycommdlist = new QueryCommandBuilders(); TypeDescriptor md = TypeDescriptor.ParserMeta(this);//获取实体的元数据 if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接 if (db.IsNull()) { result.IsSuccess = false; result.Message = "数据库配置不正确"; return result; } if (enty.newSt.IsNull()) { result.IsSuccess = false; result.Message = "备注信息不能为空"; return result; } else { if (enty.newSt.NewSt.IsNull()) { result.IsSuccess = false; result.Message = "备注信息不能为空"; return result; } } QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句 qcBuilder.TypeDes = md; //qcBuilder.SelectField = enty.SelectField; qcBuilder.ShowField = enty.ShowField; if (enty.TopNum > 0) qcBuilder.Top = enty.TopNum.ToString(); qcBuilder.PersistType = EntityPersistType.Query; cmd = qcBuilder.GetQueryCommand(); // querycommdlist.Add(qcBuilder); System.Diagnostics.StackFrame[] sfs = enty.newSt.NewSt.GetFrames(); if (sfs.Count() > 0) { System.Diagnostics.StackFrame infos = sfs[0]; System.Reflection.MethodBase mb = infos.GetMethod(); var filename = infos.GetFileName(); sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", enty.newSt.Author, enty.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName); } DataTable dt = db.ExecuteDataTable(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters); var objlist = DataToModel.Dt2EnList(dt); sw.Stop(); string str = sw.Elapsed.ToString(); result.ResultModel = objlist; result.IsSuccess = objlist.Count > 0; result.Message = string.Format("返回数据成功记录数:{0}耗时:{1}", objlist.Count, str); return result; } catch (Exception ex) { //LogHelper.WriteExLog(ex); result.IsSuccess = false; result.Message = ex.ToString(); return result; } finally { string showsqlstr = string.Format(@"{0}{1}", cmd.SqlString, sqlWithComment); result.StrSql = showsqlstr; result.DBConfig = db.ConnectionString; if (!db.IsNull()) db.Close(); } } /// /// 批量更新操作 /// /// /// //private ResponseModel UpdateEntityEnd(object entyvalue, DataAccess db) private ResponseModel UpdateEntityEnd(ResquestUpdateModel request) { ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand(); try { System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); MetaData md = (request.QueryModel.IfNotNull()) ? MetaDataManager.GetMetaData(this, request.QueryModel) : MetaDataManager.GetMetaData(this);//获取实体的元数据 if (request.db.IsNull()) request.db = DataAccessFactory.CreateDataConnection(md.ModuleName, DataConfigEnum.WriteData);//创建数据库连接 if (request.db.IsNull()) { result.IsSuccess = false; result.Message = "数据库配置不正确"; return result; } QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(request.db.DatabaseType);////构建生成哪种SQL语句 qcBuilder.Md = md; qcBuilder.PersistType = EntityPersistType.Update; qcBuilder.Predicate = request.Predicate; cmd = qcBuilder.GetQueryCommand();//解析SQL语句 int num = request.db.ExecuteNonQuery(cmd.CommandText, cmd.Parameters);//执行SQL语句 sw.Stop(); string str = sw.Elapsed.ToString(); result.IsSuccess = num > 0; result.Message = "数据更新成功,用时:" + str; } catch (Exception ex) { // result.IsSuccess = false; result.Message = ex.ToString(); } finally { result.StrSql = cmd.SqlString; result.DBConfig = request.db.ConnectionString; if (!request.db.IsNull()) request.db.Close(); } return result; } #region Old分页GetPageRecordDt代码 ///// ///// 获取分页数据 ///// ///// ///// ///// //public override ResponseTable GetPageRecordDt(string showfield, int startNum, int pageSize) //{ // SqlCmd = new Dictionary(); db = null; // try // { // QueryCommandBuilders querycommd = new QueryCommandBuilders(); // MetaData md = MetaDataManager.GetMetaData(this);//获取实体的元数据 // if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接 // QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句 // qcBuilder.Md = md;//实体属性 // qcBuilder.PersistType = EntityPersistType.QueryPage;//操作方式 // qcBuilder.PageNo = startNum; // qcBuilder.PageSize = pageSize; // qcBuilder.ShowField = showfield; // QueryCommand cmd = qcBuilder.GetQueryCommand(); // querycommd.Add(qcBuilder); // if (md.ReferenceObjects.Count > 0) // { // md = MetaDataManager.GetMetaData(this);//获取实体的元数据 // if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接 // qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句 // qcBuilder.Md = md;//实体属性 // qcBuilder.PersistType = EntityPersistType.QueryPage;//操作方式 // qcBuilder.PageNo = startNum; // qcBuilder.PageSize = pageSize; // cmd = qcBuilder.GetQueryCommand(); // querycommd.Add(qcBuilder); // } // SqlCmd.Add(cmd.CommandText, cmd.Parameters); // DataTable dt = db.ExecuteDataTable(cmd.CommandText, cmd.Parameters); // return dt; // } // catch (Exception ex) // { // LogHelper.WriteExLog(ex); // // // return new DataTable(); // } // finally // { // if (!db.IsNull()) db.Close(); // } //} #endregion #region OldGetEntity ///// ///// 获取单个实体 ///// ///// ///// //public override ResponseModel GetEntity(string oid, string showfield, DataAccess db) //{ // lock (this) //处理并发情况(分布式情况) // { // T obj = Activator.CreateInstance(); var result = new ResponseModel(); // try // { // if (!string.IsNullOrEmpty(oid)) // { // SqlCmd = new Dictionary(); // #region 获取主对象 // MetaData md = MetaDataManager.GetMetaData(typeof(T));//获取实体的元数据 // md.ModuleName = Activator.CreateInstance().ModuleName; // md.WhereSql = ModPerkey(md.PrimaryKey, oid);//自定义查询条件 // if (db.IsNull()) // { // db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接 // } // QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句 // qcBuilder.Md = md; // qcBuilder.PersistType = EntityPersistType.Query; // qcBuilder.ShowField = showfield; // qcBuilder.Top = "1"; // qcBuilder.SqlType = SqlEnum.MainSql; // QueryCommand cmd = qcBuilder.GetQueryCommand();//生成SQL语句和参数 // SqlCmd.Add(cmd.CommandText, cmd.Parameters); // using (IDataReader rdr = db.ExecuteDataReader(cmd.CommandText, cmd.Parameters)) // { // obj = DataToModel.Dr2En(rdr); // } // #endregion // #region 获取扩展对象 // if (md.ReferenceObjects.Count > 0) // { // qcBuilder.Fields = MetaDataManager.GetEntityFields(obj); // qcBuilder.SqlType = SqlEnum.ReferenceSql; // if (qcBuilder.Fields.Count > 0) // { // cmd = qcBuilder.GetQueryCommand();//生成SQL语句和参数 // if (cmd.Parameters.Count > 0) // { // using (IDataReader rdr2 = db.ExecuteDataReader(cmd.CommandText, cmd.Parameters)) // { // obj = DataToModel.Dr2En(rdr2, obj); // } // } // } // } // #endregion // result.IsSuccess = true; // result.Mod = obj; // return result; // } // else // { // result.IsSuccess = false; // result.Message = "没有查询找到数据"; // result.Mod = obj; // return result; // } // } // catch (Exception ex) // { // LogHelper.WriteExLog(ex); // result.Message = ex.ToString(); // return result; // } // finally // { // if (!db.IsNull()) db.Close(); // } // } //} #endregion #endregion #region 获取带扩展属性的实体集合 /// /// /// /// //public override ResponseModelList GetReferenceList(int startNum, int pageSize) //{ // db = null; // return GetReferenceList(db, startNum, pageSize); //} /// /// 获取带扩展属性的实体集合用关联SQL语句来实现 /// /// /// //public override ResponseModelList GetReferenceList(DataAccess db, int startNum, int pageSize) //{ // SqlCmd = new Dictionary(); db = null; // var result = new ResponseModelList(); // try // { // MetaData md = MetaDataManager.GetMetaData(this);//获取实体的元数据 // if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接 // QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句 // qcBuilder.Md = md; // qcBuilder.PageNo = startNum; // qcBuilder.PageSize = pageSize; // qcBuilder.PersistType = EntityPersistType.LeftJoin; // QueryCommand cmd = qcBuilder.GetQueryCommand(); // DataTable dt = new DataTable(); // SqlCmd.Add(cmd.CommandText, cmd.Parameters); // dt = db.ExecuteDataTable(cmd.CommandText, cmd.Parameters); // var objlist = DataToModel.Dt2EnList(dt); // result.IsSuccess = true; // result.ModList = objlist; // return result; // } // catch (Exception ex) // { // LogHelper.WriteExLog(ex); // result.Message = ex.ToString(); // return result; // } // finally // { // if (!db.IsNull()) db.Close(); // } //} #endregion /// /// 查询条件表达式 /// /// /// 主键值 /// private string ModPerkey(string oid, string value) { string tmpFilter = value; if (!string.IsNullOrEmpty(tmpFilter)) tmpFilter = oid + "='" + tmpFilter + "'"; return tmpFilter; } public override void GetDetail(int level) { throw new NotImplementedException(); } /// /// 给实体赋值 /// /// 字段名称 /// 默认值 protected void SetChanaged(string FieldName, object defaultValue) { if (!Values.ContainsKey(FieldName)) { EntityValue val = new EntityValue(); val.OriginalValue = defaultValue; val.FieldName = FieldName; val.IsChanage = false; Values.Add(FieldName, val); } else { EntityValue val = base.Values[FieldName]; if (object.Equals(val.OriginalValue, defaultValue)) { val.CurrentValue = null; val.IsChanage = false; } else { val.CurrentValue = defaultValue; val.IsChanage = true; } } } /// /// 获得对象的值 /// /// 字段名称 /// protected object ToValue(string FieldName) { if (base.Values.ContainsKey(FieldName)) { EntityValue val = base.Values[FieldName]; if (val.CurrentValue != null) { return val.CurrentValue; } if (val.OriginalValue != null) { return val.OriginalValue; } return null; } return null; } /// /// 属性值修改情况 /// /// 字段名称 /// 当前值 protected void ToChanaged(string FieldName, object currentValue) { if (base.Values.ContainsKey(FieldName)) { EntityValue val = base.Values[FieldName]; if (object.Equals(val.OriginalValue, currentValue)) { val.CurrentValue = null; val.IsChanage = false; } else { val.CurrentValue = currentValue; val.IsChanage = true; } } } [JsonIgnore, NotMapped] public override string ModuleName { get; set; } } }