/// <summary> /// 获取实体sql信息 /// </summary> /// <returns>实体sql信息</returns> private EntitySqlInfo GetEntitySqlInfo() { EntitySqlInfo _info = (EntitySqlInfo)s_table[typeof(T).FullName]; //_info = null if (_info == null) { // 用于支持扩展列的表名 _info = new EntitySqlInfo(); //_info.TableName = string.Format("[{0}]", typeof(T).Name); _info.TableName = string.Format("{0}", typeof(T).Name); // 如果有别名,则使用别名 DataEntityAttribute attribute = typeof(T).GetMyAttribute <DataEntityAttribute>(); if (attribute != null && !string.IsNullOrEmpty(attribute.Alias)) { //_info.TableName = string.Format("[{0}]", attribute.Alias); _info.TableName = string.Format("{0}", attribute.Alias); } // 获取字段名 foreach (PropertyInfo prop in typeof(T).GetProperties()) { TransferProperty(prop, _info); } s_table[typeof(T).FullName] = _info; } return(_info); }
/// <summary> /// 构造函数 /// </summary> /// <param name="type">命令类型</param> /// <param name="argsObject">参数</param> /// <param name="filter">过滤条件(参数化sql的过滤条件语句)</param> public StandardXmlCommand(XmlCommandType type, object argsObject, string filter) { _sqlInfo = GetEntitySqlInfo(); var sql = new StringBuilder(); sql.AppendFormat("select {0} from {1} where 1=1", _sqlInfo.Properties.Join(","), _sqlInfo.TableName + " " + _sqlInfo.ExtendTables.Join(" ")); List <SqlParameter> parameterList = new List <SqlParameter>(); switch (type) { case XmlCommandType.GetSingle: sql.AppendFormat(" and {0}=@oid", _sqlInfo.PrimaryKey); parameterList.Add(new SqlParameter() { ParameterName = "@oid", DbType = DbType.Guid, Direction = ParameterDirection.Input, Size = 0 }); break; case XmlCommandType.GetList: case XmlCommandType.GetPageList: break; case XmlCommandType.GetListByIds: sql.AppendFormat(" and {0} IN (SELECT AllItem FROM dbo.fn_split(@oids,','))", _sqlInfo.PrimaryKey); parameterList.Add(new SqlParameter() { ParameterName = "@oids", DbType = DbType.String, Direction = ParameterDirection.Input, Size = 0 }); break; case XmlCommandType.GetCount: sql = new StringBuilder(); sql.AppendFormat("select count(1) from {0} where 1=1", _sqlInfo.TableName); break; } if (!string.IsNullOrEmpty(filter)) { sql.AppendFormat(" and {0}", filter); Regex reg = new Regex(@"[^@@](?<p>@\w+)"); if (argsObject != null) { PropertyInfo[] argProps = argsObject.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public); foreach (Match m in reg.Matches(filter)) { // 跳过同名参数 if (parameterList.Count(p => p.ParameterName == m.Groups["p"].Value) > 0) { continue; } var argProp = argProps.FirstOrDefault(p => "@" + p.Name == m.Groups["p"].Value); parameterList.Add(new SqlParameter() { ParameterName = m.Groups["p"].Value, DbType = CSharp2DbType(argProp.PropertyType.GetRealType()), Direction = ParameterDirection.Input, Size = 0 }); } } } SqlParameter[] parameters = GetParameters(parameterList, argsObject); _query = CPQuery.From(sql.ToString(), parameters); _query.Command.CommandTimeout = 30; _query.Command.CommandType = CommandType.Text; }
/// <summary> /// 转换属性 /// </summary> /// <param name="info">属性</param> /// <param name="entity">实体Sql信息</param> private void TransferProperty(PropertyInfo info, EntitySqlInfo entity) { DataColumnAttribute attrColumn = info.GetMyAttribute <DataColumnAttribute>(); if (attrColumn != null) { var prop = ""; if (!string.IsNullOrEmpty(attrColumn.Alias)) { prop = string.Format("{0}.[{1}]", entity.TableName, attrColumn.Alias); } else { prop = string.Format("{0}.[{1}]", entity.TableName, info.Name); } entity.Properties.Add(prop); if (attrColumn.PrimaryKey) { entity.PrimaryKey = prop; } } else { ExtendColumnAttribute attrExtColumn = info.GetMyAttribute <ExtendColumnAttribute>(); if (attrExtColumn != null && attrExtColumn.ColumnType != 0) { switch (attrExtColumn.ColumnType) { case ExtendColumnTypeEnum.KeyParamOption_Code: entity.ExtendTables.Add(string.Format("LEFT JOIN dbo.KeyParamOption AS {0} ON [{0}].[Code] = {1}.[{2}] AND [{0}].[ParamGroup] = '{3}'", info.Name, entity.TableName, attrExtColumn.RelationColumn, attrExtColumn.Expression)); entity.Properties.Add(string.Format("[{0}].[Name] AS {0}", info.Name)); break; case ExtendColumnTypeEnum.KeyParamOption_Guid: entity.ExtendTables.Add(string.Format("LEFT JOIN dbo.KeyParamOption AS {0} ON [{0}].[KeyParamOptionID] = {1}.[{2}]", info.Name, entity.TableName, attrExtColumn.RelationColumn)); entity.Properties.Add(string.Format("[{0}].[Name] AS {0}", info.Name)); break; case ExtendColumnTypeEnum.UserName_Guid: entity.ExtendTables.Add(string.Format("LEFT JOIN {0}.dbo.ORG_UserInfo AS {1} ON [{1}].[UserGUID] = {2}.[{3}]", ConnStringHelper.GetDBName("SystemCore"), info.Name, entity.TableName, attrExtColumn.RelationColumn)); entity.Properties.Add(string.Format("[{0}].[UserName_Chn] AS {0}", info.Name)); break; case ExtendColumnTypeEnum.UserName_Code: entity.ExtendTables.Add(string.Format("LEFT JOIN {0}.dbo.ORG_UserInfo AS {1} ON [{1}].[UserCode] = {2}.[{3}]", ConnStringHelper.GetDBName("SystemCore"), info.Name, entity.TableName, attrExtColumn.RelationColumn)); entity.Properties.Add(string.Format("[{0}].[UserName_Chn] AS {0}", info.Name)); break; case ExtendColumnTypeEnum.BusinessUnit_Guid: entity.ExtendTables.Add(string.Format("LEFT JOIN {0}.dbo.ORG_BusinessUnit AS {1} ON [{1}].[BUGUID] = {2}.[{3}]", ConnStringHelper.GetDBName("SystemCore"), info.Name, entity.TableName, attrExtColumn.RelationColumn)); entity.Properties.Add(string.Format("[{0}].[BUName] AS {0}", info.Name)); break; case ExtendColumnTypeEnum.BusinessUnit_Code: entity.ExtendTables.Add(string.Format("LEFT JOIN {0}.dbo.ORG_BusinessUnit AS {1} ON [{1}].[BUCode] = {2}.[{3}]", ConnStringHelper.GetDBName("SystemCore"), info.Name, entity.TableName, attrExtColumn.RelationColumn)); entity.Properties.Add(string.Format("[{0}].[BUName] AS {0}", info.Name)); break; case ExtendColumnTypeEnum.Common: entity.ExtendTables.Add(attrExtColumn.Expression); entity.Properties.Add(attrExtColumn.RelationColumn); break; } } } }