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         }
  • 相关阅读:
    websocket协议解决消息发送问题 Could not decode a text frame as UTF-8.
    成功解决internal/modules/cjs/loader.js:596 throw err; ^ Error: Cannot find module 'minimatch'
    FastDFS客户端与自定义文件存储系统
    fastdfs 中client.conf 文件
    centos 中 redis 的安装
    redis安装成功后get: command not found
    Shell基础知识(二)
    Shell基础知识(一)
    binary search模板总结
    配置远程jupyter notebook
  • 原文地址:https://www.cnblogs.com/kakura/p/6108909.html
Copyright © 2011-2022 走看看