zoukankan      html  css  js  c++  java
  • SqlHelper简单实现(通过Expression和反射)3.实体,数据传输对象(DTO)Helper类设计

    EntityHelper的主要功能有:

    1.通过反射获取DTO的字段,主要提供给在需要从Entity获取数据后,填充给DTO并返回的作用:

    通过反射获取PropertyInfo[]对象,然后取出Name属性,填入新表。

     1         /// <summary>
     2         /// 获取DTO字段
     3         /// </summary>
     4         /// <typeparam name="T"></typeparam>
     5         /// <returns></returns>
     6         public static List<string> GetDTOFields<T>()
     7         {
     8             var fields = typeof(T).GetProperties();
     9             return fields.Select(i => i.Name).ToList();
    10         }

    2.获取实体中的字段,主要提供在Select,Update,Insert,Join等中字段的获取,以及动态返回泛型TEntity时为反射构建Entity的对象时使用。

    通过反射获取PropertyInfo[],当isFullName为true时,使用GetTableName<T>方法获取实体表名,并将表名和字段名用'.'连接

     1         /// <summary>
     2         /// 获取Entity实体中的字段
     3         /// </summary>
     4         /// <typeparam name="T"></typeparam>
     5         /// <param name="isFullName">true:字段名前面包含表名</param>
     6         /// <returns></returns>
     7         public static List<string> GetFields<T>(bool isFullName)
     8         {
     9             var fields = typeof(T).GetProperties();
    10             var result = new List<string>();
    11             if (isFullName)
    12             {
    13                 var tablename = EntityHelper.GetTableName<T>();
    14                 result.AddRange(fields.Select(i => tablename + "." + i.Name));
    15                 return result;
    16             }
    17             result.AddRange(fields.Select(i => i.Name));
    18             return result;
    19         }
    20 
    21         /// <summary>
    22         /// 获取实体中的字段,包括表名,使用","连接
    23         /// </summary>
    24         /// <typeparam name="T"></typeparam>
    25         /// <returns></returns>
    26         public static string GetFiledString<T>()
    27         {
    28             var list = GetFields<T>(true).ToArray();
    29             var result = string.Join(",", list);
    30             return result;
    31         }

    3.获取实体代表的数据表的表名,用于构建Sql时提供表名。

    前文已经介绍了自定义特性[TableName],此处就是使用这个特性反射出Entity代表的表名。

     1         /// <summary>
     2         /// 获取实体代表的表名
     3         /// </summary>
     4         /// <typeparam name="T"></typeparam>
     5         /// <returns></returns>
     6         public static string GetTableName<T>()
     7         {
     8             var tablename = typeof(T).GetCustomAttributes(typeof(TableNameAttribute), true);
     9             return ((TableNameAttribute)tablename[0]).TableName;
    10         }
    11 
    12         public static string GetTableName(Type entityType)
    13         {
    14             try
    15             {
    16                 var tablename = entityType.GetCustomAttributes(typeof(TableNameAttribute), true);
    17                 return ((TableNameAttribute)tablename[0]).TableName;
    18             }
    19             catch
    20             {
    21                 throw new Exception("没有配置TableName特性!");
    22             }
    23             
    24         }

    4.获取实体代表的数据表的主键

    前文已经介绍了自定义特性[Primary],此处就是使用这个特性反射出Entity代表的表中的主键。

     1         /// <summary>
     2         /// 获取实体主键名称
     3         /// </summary>
     4         /// <typeparam name="T"></typeparam>
     5         /// <returns></returns>
     6         public static string GetPrimaryKey<T>()
     7         {
     8             var primary = typeof(T).GetCustomAttributes(typeof(PrimaryAttribute), true);
     9             var pri = typeof(T).GetProperties();
    10             foreach (var i in pri)
    11             {
    12                 var pris = i.GetCustomAttributes(typeof(PrimaryAttribute), true);
    13                 if (pris.Any())
    14                 {
    15                     return i.Name;
    16                 }
    17             }
    18             return "";     
    19         }
  • 相关阅读:
    Web前端框架与类库的思考【转】
    mouseover事件mouseenter事件
    11_Eclipse中演示Git版本号的创建,历史版本号的改动,创建分支,合并历史版本号和当前版本号
    实现了私聊和群聊功能的聊天工具
    有预处理命令#define声明一个常数,用以表明1年中有多少秒
    解决Office软件冲突问题
    pig载入两个不同字段个数的文件?load file with different items(f1有42列,f2有43列读到一个对象中)
    游戏公司通用屏蔽字列表
    Android统计图表MPAndroidChart
    HTTP状态码解析
  • 原文地址:https://www.cnblogs.com/kakura/p/6108909.html
Copyright © 2011-2022 走看看