首页 > 代码库 > 框架实例应用例子
框架实例应用例子
首先是实体类,继承ORM基类
//--------------------------------------------------------------------------------// 文件描述:管理员信息实体// 文件作者:品浩// 创建日期:2013-12-12// 修改记录: //--------------------------------------------------------------------------------using System;using System.Data;using lph.Foundation;using lph.FrameWork;namespace lph.General.Admin.Model{ [Table("Admin")] public class AdminInfo : Info, IAdministratorInfo { [Column("AdminName", SqlDbType.VarChar)] /// <summary> /// 管理员名称 /// </summary> public string AdminName { get; set; } [Column("AdminPassword", SqlDbType.VarChar)] /// <summary> /// 管理员密码 /// </summary> public string AdminPassword { get; set; } [Column("UserName", SqlDbType.VarChar)] /// <summary> /// 关联前台用户名 /// </summary> public string UserName { get; set; } [Column("RndPassword", SqlDbType.VarChar)] /// <summary> /// 随机密码 /// </summary> public string RndPassword { get; set; } [Column("EnableMultiLogin", SqlDbType.Bit)] /// <summary> /// 是否可以在多处登录 /// </summary> public bool EnableMultiLogin { get; set; } [Column("EnableModifyPassword", SqlDbType.Bit)] /// <summary> /// 是否允许修改自己的密码 /// </summary> public bool EnableModifyPassword { get; set; } [Column("Status", SqlDbType.Bit)] /// <summary> /// 帐号状态(1启用,0禁用) /// </summary> public bool Status { get; set; } [Column("LoginTimes", SqlDbType.Int)] /// <summary> /// 登录次数 /// </summary> public int LoginTimes { get; set; } [Column("LoginErrorTimes", SqlDbType.Int)] /// <summary> /// 登录错误次数 /// </summary> public int LoginErrorTimes { get; set; } [Column("LoginErrorTimes_Today", SqlDbType.Int)] /// <summary> /// 今天登录错误次数 /// </summary> public int LoginErrorTimes_Today { get; set; } [Column("LastLoginIP", SqlDbType.VarChar)] /// <summary> /// 最后登录IP /// </summary> public string LastLoginIP { get; set; } [Column("LastLoginTime", SqlDbType.DateTime)] /// <summary> /// 最后登录时间 /// </summary> public DateTime? LastLoginTime { get; set; } [Column("LastModifyPasswordTime", SqlDbType.DateTime)] /// <summary> /// 最后修改密码时间 /// </summary> public DateTime? LastModifyPasswordTime { get; set; } [Column("CreatTime", SqlDbType.DateTime)] /// <summary> /// 创建时间 /// </summary> public DateTime? CreatTime { get; set; } [Column("CreatPerson", SqlDbType.VarChar)] /// <summary> /// 创建人 /// </summary> public string CreatPerson { get; set; } }}
然后只放出基类的一部分(基类是组装性质的)
1
//--------------------------------------------------------------------------------// 文件描述:基类的字段、属性、构造函数// 文件作者:品浩// 创建日期:2013-11-01// 修改记录: //--------------------------------------------------------------------------------using System;using System.Collections.Generic;using System.Reflection;using System.Web.Script.Serialization;using System.Data;namespace lph.FrameWork{ /// <summary> /// 属性不被序列化--加[ScriptIgnore]特性,请记住! /// </summary> public partial class Info { /// <summary> /// 保存了所有实体的信息字典集合 /// </summary> private static IDictionary<string, object> entityList = new Dictionary<string, object>(); /// <summary> /// 本实体信息 /// </summary> [ScriptIgnore] public Entity_Info entity; /// <summary> /// 插入语句模板 /// </summary> private string insert_template = "insert into {0}{1};SELECT @Identity =@@Identity;"; /// <summary> /// 更新语句模板 /// </summary> private string update_template = "update {0} set {1}"; /// <summary> /// 构造实体类需要的数据映射关系 /// </summary> public Info() { Type t = this.GetType(); if (entityList.ContainsKey(t.Name)) { entity = entityList[t.Name] as Entity_Info; } else { entity = new Entity_Info();//用于保存实体信息,减少反射从而提高性能 entity.type = t;//保存实体类型 entity.info_table_name = GetTable(this).TableName;//得到对象的表名 entity.m_Property = t.GetProperties(BindingFlags.Public | BindingFlags.Instance); entity.ColumnList = GetObjecColumns(this); entity.info_table_fields = GetInfoFields();//得到字段列表 entity.m_searchFields = entity.info_table_fields.Split(‘,‘);//得到搜索字段列表 entity.insert_sql = string.Format(insert_template, entity.info_table_name, GetInsertSql());//赋值插入语句 entity.update_sql = string.Format(update_template, entity.info_table_name, GetUpdateSql());//赋值更新语句 //缓存,加入字典列表 if (!entityList.ContainsKey(t.Name)) { entityList.Add(t.Name, entity); } } } //======================================================================= /// <summary> /// 用于记录更新随机值,处理高并发问题,只在读取信息的时候赋值并写入缓存,若更新的时候数值不相等即是已经被更改过 /// </summary> [Ignore(true), ScriptIgnore] public string UpdateRandom { get; set; } /// <summary> /// 记录本次查询时总记录数 /// </summary> [Ignore(true), ScriptIgnore] public int totalNumber { get; set; } /// <summary> /// 每个表的自增列ID /// </summary> [Column("ID", SqlDbType.Int), Ignore(true)] public virtual int ID { get; set; } //============================================================================================================================== }}
2
using System;//--------------------------------------------------------------------------------// 文件描述:增删改查等公有方法(外部调用方法集合)// 文件作者:品浩// 创建日期:2013-11-01// 修改记录: //--------------------------------------------------------------------------------using System.Collections.Generic;using System.Data;using System.Web.Script.Serialization;using System.Data.SqlClient;namespace lph.FrameWork{ public partial class Info { /// <summary> /// 返回添加信息的结果集 /// </summary> /// <returns></returns> public DBResult Add() { DBResult DalResult = new DBResult(); try { Parameters parms = GetParameters(); parms.AddOutParameter("@Identity", SqlDbType.Int, 0); int Identity = DBHelper.ExecuteOutput(entity.insert_sql, parms).ToInt32(); if (Identity > 0) { SiteCache.Max(SiteCacheKey.CK_MaxID_ + entity.info_table_name, Identity); DalResult.result = Status.Success; DalResult.IdentityID = Identity; } return DalResult; } catch (Exception ex) { DalResult.PromptMessage = ex.Message; DalResult.result = Status.Other; return DalResult; } } /// <summary> /// 返回更新的结果集 /// </summary> /// <returns></returns> public DBResult Update() { string filter = "ID=" + this.ID; return Update(filter); } /// <summary> /// 返回更新的结果集, 此版本根据(where)条件,如参数"ID=1" /// </summary> /// <returns></returns> public DBResult Update(string filter) { DBResult DalResult = new DBResult(); bool result = false; string randomStr = SiteCacheKey.Null; try { Parameters parms = GetParameters(); string updateSql = entity.update_sql + " where " + filter; if (SiteCache.Get(SiteCacheKey.CK_Random_ + entity.info_table_name + this.ID) != null) { randomStr = SiteCache.Get(SiteCacheKey.CK_Random_ + entity.info_table_name + this.ID).ToString(); } if (randomStr == this.UpdateRandom | randomStr == SiteCacheKey.Null) { result = DBHelper.ExecuteSql(updateSql, parms); if (result) { lock (entity.lock_update) { SiteCache.Max(SiteCacheKey.CK_Random_ + entity.info_table_name + this.ID, RandomHelper.GetRandomString(20)); } } } else { DalResult.PromptMessage = "信息已被前一线程更新,为了安全性,请重新操作"; DalResult.result = Status.Other; return DalResult; } if (result) { DalResult.result = Status.Success; } return DalResult; } catch (Exception ex) { DalResult.PromptMessage = ex.Message; DalResult.result = Status.Other; return DalResult; } } /// <summary> /// 根据id删除指定信息,格式1 id:1 格式2 id:1,2,3 /// </summary> /// <param name="id"></param> /// <returns></returns> public bool Delete(string id) { return DBHelper.ExecuteSql("DELETE FROM " + entity.info_table_name + " WHERE ID IN ( " + DBHelper.ToValidId(id) + " )"); } /// <summary> /// 删除自己 /// </summary> /// <returns></returns> public bool Delete() { return DBHelper.ExecuteSql("DELETE FROM " + entity.info_table_name + " WHERE ID=" + this.ID); } /// <summary> /// 根据条件删除信息 /// </summary> /// <param name="filter"></param> /// <returns></returns> public bool DeleteByFilter(string filter) { return DBHelper.ExecuteSql("DELETE FROM " + entity.info_table_name + " WHERE " + filter); } /// <summary> /// 根据id获取指定信息 /// </summary> /// <param name="id"></param> /// <returns></returns> public T GetInfoById<T>(int id) where T : Info, new() { T obj = null; SqlDataReader result = DBHelper.ExecuteReader("SELECT * FROM " + entity.info_table_name + " with (nolock) WHERE ID = @ID", new Parameters("@ID", SqlDbType.Int, id)); if (result.Read()) { obj = InfoFromRdr<T>(new NullableDataReader(result)); } return obj; } /// <summary> /// 根据指定列与值获得信息 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="column"></param> /// <param name="value"></param> /// <returns></returns> public T GetInfoByFilter<T>(string column, string value) where T : Info, new() { T obj = null; SqlDataReader result = DBHelper.ExecuteReader("SELECT * FROM " + entity.info_table_name + " with (nolock) WHERE " + column + " = @" + column, new Parameters("@" + column, SqlDbType.VarChar, value)); if (result.Read()) { obj = InfoFromRdr<T>(new NullableDataReader(result)); } return obj; } /// <summary> /// 根据sql获取指定信息 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sql"></param> /// <returns></returns> public T GetInfoBySql<T>(string sql) where T : Info, new() { T obj = null; using (SqlDataReader rdr = DBHelper.ExecuteReader(sql)) { if (rdr.Read()) { obj = InfoFromRdr<T>(new NullableDataReader(rdr)); } } return obj; } /// <summary> /// 判断指定字段的值是否存在 /// </summary> public bool IsExist<T>(string column, string value) where T : Info, new() { bool result = false; string strSql = "SELECT COUNT(*) FROM {0} with (nolock) WHERE {1} =‘{2}‘"; value = DBHelper.FilterBadChar(value); result = DBHelper.Exists(string.Format(strSql, entity.info_table_name, column, value)); return result; } public bool IsExist<T>(string column, string value, string oldID) where T : Info, new() { bool result = false; value = DBHelper.FilterBadChar(value); string strSql = "SELECT COUNT(*) FROM {0} with (nolock) WHERE {1} =‘{2}‘ and ID!=" + oldID; result = DBHelper.Exists(string.Format(strSql, entity.info_table_name, column, value)); return result; } /// <summary> /// 直接执行SQL语句 /// </summary> /// <param name="strSql"></param> /// <returns></returns> public bool ExecuteSql(string strSql) { return DBHelper.ExecuteSql(strSql); } /// <summary> /// 获取信息列表(根据开始行数,每页显示行数),totalNumber为表的总行数 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="startRowIndexId"></param> /// <param name="maxNumberRows"></param> /// <returns></returns> public IList<T> GetList<T>(int startRowIndexId, int maxNumberRows) where T : Info, new() { return GetList<T>(startRowIndexId, maxNumberRows, null); } /// <summary> /// 获取信息列表(根据开始行数,每页显示行数,条件)条件格式:Category = 1 或 Category like %x% 自由组合sql语句 /// totalNumber为表的总行数 /// </summary> /// <param name="startRowIndexId"></param> /// <param name="maxNumberRows"></param> /// <param name="filter"></param> /// <returns></returns> public IList<T> GetList<T>(int startRowIndexId, int maxNumberRows, string filter) where T : Info, new() { ListParameters listParms = new ListParameters(startRowIndexId, maxNumberRows, entity.info_table_name, "*", "ID", (filter ?? string.Empty).ToString()); return GetList<T>(listParms); } /// <summary> /// 获取信息列表 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="listParameters"></param> /// <returns></returns> public IList<T> GetList<T>(ListParameters listParameters) where T : Info, new() { Parameters parms = new Parameters(); string sorts = "DESC"; if (listParameters.Sorts == Sorts.Asc) { sorts = "ASC"; } parms.AddInParameter("@StartRows", SqlDbType.Int, listParameters.StartRows);//开始行数 parms.AddInParameter("@PageSize", SqlDbType.Int, listParameters.PageSize);//每页显示多少行 parms.AddInParameter("@SortColumn", SqlDbType.VarChar, listParameters.SortColumn);//排序列名 parms.AddInParameter("@StrColumn", SqlDbType.VarChar, listParameters.StrColumn);//查询的列名,默认所有* parms.AddInParameter("@Sorts", SqlDbType.VarChar, sorts);//默认降序 parms.AddInParameter("@Filter", SqlDbType.VarChar, listParameters.Filter); parms.AddInParameter("@TableName", SqlDbType.VarChar, listParameters.TableName); parms.AddOutParameter("@Total", SqlDbType.Int, 0);//输出参数,列表总数目 SqlDataReader result = DBHelper.ExecuteReader("PR_Common_GetList", parms, CommandType.StoredProcedure); IList<T> List = new List<T>(); while (result.Read()) { List.Add(InfoFromRdr<T>(new NullableDataReader(result))); } this.totalNumber = List.Count; return List; } ///// <summary> ///// 获取信息列表(根据Sql语句) ///// totalNumber为查询结果的总行数 ///// </summary> ///// <typeparam name="T"></typeparam> ///// <param name="sql"></param> ///// <returns></returns> public IList<T> GetList<T>(string sql) where T : Info, new() { IList<T> List = new List<T>(); Parameters parms = new Parameters(); SqlDataReader result = DBHelper.ExecuteReader(sql, parms); while (result.Read()) { List.Add(InfoFromRdr<T>(new NullableDataReader(result))); } this.totalNumber = List.Count.ToInt32(); return List; } ///// <summary> ///// 获取最大ID ///// </summary> ///// <returns></returns> public int GetMaxId() { int maxID; if (SiteCache.Get(SiteCacheKey.CK_MaxID_ + entity.info_table_name) != null) { maxID = SiteCache.Get(SiteCacheKey.CK_MaxID_ + entity.info_table_name).ToInt32(); } else { maxID = DBHelper.GetMaxID("ID", entity.info_table_name); } return maxID; } /// <summary> /// 返回最大记录数 /// </summary> /// <returns></returns> public int GetCount() { return this.totalNumber; } #region 序列化与反序列化 /// <summary> /// 序列化单个对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="Info"></param> /// <returns></returns> public static string SerializeInfo<T>(T Info) where T : Info, new() { return new JavaScriptSerializer().Serialize(Info); } /// <summary> /// 反序列化单个对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="inputJson"></param> /// <returns></returns> public static T DeserializeToInfo<T>(string JsonStr) where T : Info, new() { return new JavaScriptSerializer().Deserialize<T>(JsonStr); } /// <summary> /// 序列化对象列表 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list"></param> /// <returns></returns> public static string SerializeInfoList<T>(IList<T> list) where T : Info, new() { var data = http://www.mamicode.com/new { data =http://www.mamicode.com/ list }; return new JavaScriptSerializer().Serialize(data); } /// <summary> /// 反序列化对象列表 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="JsonStr"></param> /// <returns></returns> public static List<T> DeserializeToInfoList<T>(string JsonStr) where T : Info, new() { Info_data<T> data = http://www.mamicode.com/new Info_data<T>(); data = new JavaScriptSerializer().Deserialize<Info_data<T>>(JsonStr); return (List<T>)data.data; } #endregion }}
最核心的类只放出下面一个方法
///// <summary> ///// 读取数据库视图信息,转换为实体类 ///// </summary> ///// <param name="rdr"></param> ///// <returns></returns> private T InfoFromRdr<T>(NullableDataReader rdr) where T : Info, new() { T Info = new T(); foreach (ColumnInfo info in entity.ColumnList) { if (typeof(object).Equals(info.property.PropertyType) && !info.property.PropertyType.IsEnum && !string.IsNullOrEmpty(rdr[info.ColumnName].ToString())) { TextReader textRead = new StringReader(rdr.GetString(info.ColumnName)); XmlSerializer serializer = new XmlSerializer(info.property.PropertyType); info.property.SetValue(Info, serializer.Deserialize(textRead), null); textRead.Close(); } if (typeof(Int32).Equals(info.property.PropertyType) & !info.ColumnName.Compare("totalNumber")) { info.property.SetValue(Info, rdr.GetInt32(info.ColumnName), null); } if (typeof(char).Equals(info.property.PropertyType)) { info.property.SetValue(Info, rdr.GetChar(info.ColumnName), null); } if (typeof(float).Equals(info.property.PropertyType)) { info.property.SetValue(Info, rdr.GetSingle(info.ColumnName), null); } if (typeof(DateTime).Equals(info.property.PropertyType)) { info.property.SetValue(Info, rdr.GetDateTime(info.ColumnName), null); } if (typeof(DateTime?).Equals(info.property.PropertyType)) { info.property.SetValue(Info, rdr.GetNullableDateTime(info.ColumnName), null); } if (typeof(int?).Equals(info.property.PropertyType)) { info.property.SetValue(Info, rdr.GetIntNullable(info.ColumnName), null); } if (typeof(byte).Equals(info.property.PropertyType)) { info.property.SetValue(Info, rdr.GetByte(info.ColumnName), null); } if (typeof(decimal).Equals(info.property.PropertyType)) { info.property.SetValue(Info, rdr.GetDecimal(info.ColumnName), null); } if (typeof(double).Equals(info.property.PropertyType)) { info.property.SetValue(Info, rdr.GetDouble(info.ColumnName), null); } if (typeof(bool).Equals(info.property.PropertyType)) { info.property.SetValue(Info, rdr.GetBoolean(info.ColumnName), null); } if (typeof(Guid).Equals(info.property.PropertyType)) { info.property.SetValue(Info, rdr.GetGuid(info.ColumnName), null); } if (info.property.PropertyType.IsEnum) { info.property.SetValue(Info, Enum.Parse(info.property.PropertyType, rdr.GetInt32(info.ColumnName).ToString()), null); } if (typeof(string).Equals(info.property.PropertyType) & !info.ColumnName.Compare("updaterandom")) { info.property.SetValue(Info, rdr.GetString(info.ColumnName) ?? string.Empty, null); } //更新库所需要的版本控制随机码 if (info.ColumnName.Compare("updaterandom")) { string randomStr = SiteCacheKey.Null; if (SiteCache.Get(SiteCacheKey.CK_Random_ + entity.info_table_name + rdr["ID"].ToString()) != null) { randomStr = SiteCache.Get(SiteCacheKey.CK_Random_ + entity.info_table_name + rdr["ID"].ToString()).ToString(); } info.property.SetValue(Info, randomStr, null); } } return Info; }
框架实例应用例子
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。