• 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         }
  • 相关阅读:
    数据库系统原理
    Java并发编程详解读书笔记(一)
    Java基础之String
    Java基础之数据类型
    winform BackgroundWorker控件的用法
    汉子转拼音
    model验证(验证登录、注册...)
    Ajax.BeginForm 异步搜索
    Ajax.ActionLink 辅助方法实现局部刷新
    js 随笔
  • 原文地址:https://www.cnblogs.com/kakura/p/6108909.html
Copyright © 2020-2023  润新知