/// <summary> /// 根据主键获取实体 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="idb">数据库连接上下文</param> /// <param name="pk">主键 例如id=1 写入 GetEntityById(1)</param> /// <returns>如果存在该实体,返回实体,否则返回null。</returns> /// <remarks> /// 对于多主键实体,主键的顺序必须是 实体的顺序否则系统会取不到正确的数据。 /// /// </remarks> public static T GetEntityById <T>(this IDbHelper idb, params object[] pk) where T : class, new() { // 根据实体获取主键 var pklist = DALUtil.GetPKAttribute <T>(); if (pklist.Count != pk.Count()) { // 实体的主键 个数如果不一致 系统自动抛出异常 throw new Exception("主键设置个数不一致"); } List <IDataParameter> list = new List <IDataParameter>(); string where = "1=1"; for (int i = 0; i < pklist.Count; i++) { where += " AND " + pklist[i] + " = " + DALUtil.GetParameterPrefix(idb) + i.ToString(); var idp = idb.GetIDataParameter(); idp.ParameterName = DALUtil.GetParameterPrefix(idb) + i.ToString(); idp.Value = pk[i]; list.Add(idp); } var dt = idb.ExecuteTable(CommandType.Text, string.Format("SELECT * FROM {0} WHERE {1}", DALUtil.GetTableName <T>(), where), list.ToArray()); if (dt.Rows.Count > 0) { return(DALUtil.GetEntity <T>(dt)[0]); } else { return(default(T)); } }
/// <summary> /// 查询数据返回实体 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="idb">数据库连接上下文</param> /// <param name="sql">查询的sql语句</param> /// <param name="paras">查询的参数列表,例如WHERE条件中Id=@0,@0 为第一个参数</param> /// <returns>返回的实体对象列表</returns> public static IList <T> Query <T>(this IDbHelper idb, string sql, object[] paras) where T : class, new() { if (!select.IsMatch(sql)) { sql = string.Format("SELECT * FROM {0} WHERE {1}", DALUtil.GetTableName <T>(), sql); } List <IDataParameter> list = new List <IDataParameter>(); int i = 0; foreach (var item in paras) { var idp = idb.GetIDataParameter(); idp.ParameterName = DALUtil.GetParameterPrefix(idb) + i++.ToString(); idp.Value = item; list.Add(idp); } if (idb.DBType == DataBaseType.Oracle) { sql = sql.Replace("@", ":"); } using (var idr = idb.ExecuteReader(CommandType.Text, sql, list.ToArray())) { return(DALUtil.GetEntity <T>(idr)); } }