/// <summary> /// 根据数据类型和过滤条件返回需要的数据。 /// </summary> /// <param name="baseRule">指定操作的业务类。</param> /// <param name="dataInDocType">指定的数据类型。</param> /// <param name="whereFilters">过滤条件</param> /// <param name="otherParamValues">其它附加的过滤条件</param> /// <returns>满足条件的DataSet 类型数据</returns> public System.Data.DataSet GetObjectAsDataSet(IBaseQueryRule baseRule, object dataInDocType, QueryParameterInfo[] parInfos, params object[] parValues) { ObjectDataMappingAttribute mappingAtt = AttributeConfigHelper.Instance.GetObjectDataMappingAttribute(dataInDocType); if (mappingAtt == null) { throw new MB.RuleBase.Exceptions.RequireConfigDataMappingException(dataInDocType); } string sqlName = string.IsNullOrEmpty(mappingAtt.XmlCfgSelectSqlName) ? MB.Orm.Mapping.Xml.XmlSqlMappingInfo.SQL_SELECT_OBJECT : mappingAtt.XmlCfgSelectSqlName; MB.Orm.Mapping.QueryParameterMappings queryMappings = baseRule.QueryParamMapping; if (queryMappings == null) { queryMappings = MB.Orm.Mapping.Xml.SqlConfigHelper.Instance.GetSqlQueryParamMappings(mappingAtt.MappingXmlFileName, sqlName); } string sqlFilter = MB.Orm.DbSql.SqlShareHelper.Instance.QueryParametersToSqlString(queryMappings, parInfos); Database db = MB.Orm.Persistence.DatabaseHelper.CreateDatabase(); ArrayList paramValues = new ArrayList(); if (parValues != null && parValues.Length > 0) { foreach (object v in parValues) { paramValues.Add(v); } } paramValues.Add(sqlFilter); System.Data.Common.DbCommand[] cmds = MB.Orm.Persistence.PersistenceManagerHelper.NewInstance.CreateDbCommandByXml(db, mappingAtt.MappingXmlFileName, sqlName, paramValues.ToArray()); if (cmds.Length != 1) { throw new MB.RuleBase.Exceptions.SelectSqlXmlConfigException(mappingAtt.MappingXmlFileName, sqlName); } System.Data.Common.DbCommand cmd = cmds[0]; DataSet ds = null; try { MB.Util.TraceEx.Write("正在执行:" + MB.Orm.Persistence.DbCommandExecuteTrack.Instance.CommandToTrackMessage(db, cmd)); ds = new DatabaseExecuteHelper(_QueryBehavior).ExecuteDataSet(db, cmd); } catch (Exception ex) { throw new MB.RuleBase.Exceptions.DatabaseExecuteException("GetObjectAsDataSet 出错!", ex); } return(ds); }
/// <summary> /// 根据指定类型获取满足条件的实体对象。 /// </summary> /// <typeparam name="T">从MB.Orm.Common.BaseModel 中继承的数据对象类型。</typeparam> /// <param name="baseRule">获取实体对象集合的业务类。</param> /// <param name="dataInDocType">在业务类中的数据类型。</param> /// <param name="filter">过滤条件。</param> /// <returns>指定类型的集合类。</returns> public List <T> GetObjects <T>(IBaseQueryRule baseRule, object dataInDocType, QueryParameterInfo[] parInfos, params object[] parValues) { ObjectDataMappingAttribute mappingAtt = AttributeConfigHelper.Instance.GetObjectDataMappingAttribute(dataInDocType); if (mappingAtt == null) { throw new MB.RuleBase.Exceptions.RequireConfigDataMappingException(dataInDocType); } string sqlName = string.IsNullOrEmpty(mappingAtt.XmlCfgSelectSqlName) ? MB.Orm.Mapping.Xml.XmlSqlMappingInfo.SQL_SELECT_OBJECT : mappingAtt.XmlCfgSelectSqlName; MB.Orm.Mapping.QueryParameterMappings queryMappings = baseRule.QueryParamMapping; if (queryMappings == null) { queryMappings = MB.Orm.Mapping.Xml.SqlConfigHelper.Instance.GetSqlQueryParamMappings(mappingAtt.MappingXmlFileName, sqlName); } string sqlFilter = MB.Orm.DbSql.SqlShareHelper.Instance.QueryParametersToSqlString(queryMappings, parInfos); Type entityType = typeof(T); if (string.Compare(entityType.FullName, "System.Object", true) == 0) { if (mappingAtt.EntityType == null) { throw new MB.Util.APPException("业务类:" + baseRule.GetType().FullName + " 中的:" + dataInDocType.GetType() + " 的数据值:" + dataInDocType.ToString() + " 在配置ObjectDataMapping时需要配置 EntityType", MB.Util.APPMessageType.SysErrInfo); } entityType = mappingAtt.EntityType; } List <object> pars = new List <object>(); if (parValues != null && parValues.Length > 0) { foreach (object p in parValues) { pars.Add(p); } } pars.Add(sqlFilter); //以后需要增加是否通过XML 配置还是根据实体自动生成。 return(new DatabaseExcuteByXmlHelper(_QueryBehavior).GetObjectsByXml <T>(entityType, mappingAtt.MappingXmlFileName, sqlName, pars.ToArray())); }