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         }
原文地址:https://www.cnblogs.com/kakura/p/6108909.html