• 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         }
  • 相关阅读:
    ceph 高可用部署
    ceph安装
    openstack 命令
    ceph
    go test 怎么做测试
    govendor
    wrap 缓存。。。
    python中if __name__ == '__main__': 的解析
    pythton 字典的使用,字典的方法
    python 基础 如何让程序接收参数,最简单用sys.argv[]来获取
  • 原文地址:https://www.cnblogs.com/kakura/p/6108909.html
Copyright © 2020-2023  润新知