当前位置/ List
DevNet帮助中心 >> 实体接口与基类说明
EntityBase实体基类

发布日期:2012-07-09       浏览:13111 次
该实体实现了IEntityBase接口的三个属性定义,该实体已经彻底摒弃了反射方法
命名空间:DevNet.Entity
这里列举几个重要的方法签名:
折叠C# Code复制内容到剪贴板
  1. /// <summary>  
  2. /// 初始化变量,由于WCF中的DataContract序列化不调用构造函数,子类可以调用该方法解决变量初始化问题该方法需要在子类中调用以初始化字段名和默认值 , 
  3. /// </summary>  
  4. protected void IniMember(string[] fieldNames, object[] fieldValues)  
  5.         
  6. /// <summary>  
  7. /// 设置属性值【引发PropertySetted事件】,子类调用  
  8. /// </summary>  
  9. /// <param name="fieldName">字段名称,请与数据表字段名称相同</param>  
  10. /// <param name="fieldValue">属性值</param>  
  11. protected void SetProperty(string fieldName, object fieldValue)  
  12.         
  13. /// <summary>  
  14. /// 获取属性值,【引发PropertyGetting事件】子类调用  
  15. /// </summary>  
  16. /// <param name="fieldName">字段名称</param>  
  17. /// <returns></returns>  
  18. protected object GetProperty(string fieldName)  
  19.          
  20. /// <summary>  
  21. /// 获取或设置指定字段的值  
  22. /// </summary>  
  23. /// <param name="fieldName">字段名称</param>  
  24. /// <returns></returns>  
  25. public object this[string fieldName]  
  26.          
以上为几个比较重要的基类方法
我们来看一下该实体如何摒弃反射方法
从DataReader转换为实体集合时的方法如下,以下方法在DevNet.DBAcces.DBHelper类中:
折叠C# Code复制内容到剪贴板
  1. /// <summary>  
  2. /// 获取实体集合[使用EntityBase中的方法]  
  3. /// </summary>  
  4. /// <typeparam name="T">实体泛型[请继承自EntityBase](属性名称请与数据表字段名称保持一致)</typeparam>  
  5. /// <param name="dbRead">DataReader数据集</param>  
  6. /// <returns></returns>  
  7. public static List<T> GetEntityLists<T>(DbDataReader dbRead) where T : EntityBase, new()  
  8. {  
  9.     if (dbRead == null)  
  10.         throw new ArgumentNullException("dbRead""参数dbRead不能为null");  
  11.     List<T> ts = new List<T>();  
  12.     while (dbRead.Read())  
  13.     {  
  14.         T t = new T();  
  15.         //根据DataReader设置实体
  16.         SetEntityByRead(t, dbRead);  
  17.         ts.Add(t);  
  18.     }  
  19.     return ts;  
  20. }  
接下来看一下SetEntityByRead方法:
折叠C# Code复制内容到剪贴板
  1. /// <summary>  
  2. /// 设置实体属性值[使用EntityBase中的方法]  
  3. /// </summary>  
  4. /// <typeparam name="T">实体泛型[请继承自EntityBase]</typeparam>  
  5. /// <param name="objEntity">泛型对象[请继承自EntityBase](属性名称请与数据表字段名称保持一致)</param>  
  6. /// <param name="dbRead">DataReader数据行</param>  
  7. public static void SetEntityByRead<T>(T objEntity, DbDataReader dbRead) where T : EntityBase  
  8. {  
  9.     if (objEntity == nullthrow new ArgumentNullException("objEntity");  
  10.     if (dbRead == nullthrow new ArgumentNullException("dbRead");  
  11.   
  12.     int i = dbRead.FieldCount;  
  13.     for(int j=0;j<i;j++)  
  14.     {  
  15.         if (!dbRead.IsDBNull(j))  
  16.         {  
  17.             //这里调用了实体的internal方法,
  18.             objEntity.SetPropertyValue(dbRead.GetName(j), dbRead[j]);  
  19.         }  
  20.     }  
  21. }  
通过以上两个方法,相信大家也了解了该实体设计方法,它已经摒弃了使用反射的方法
DBHelper类为实体数据帮助类 [提供object对象[实体类]、DataTable、DbDataReader和DbParameter与之间的转换设置],命名空间为:DevNet.DBAccess.DBHelper