EntityHelper的主要功能有:

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

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

         /// <summary>
/// 获取DTO字段
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static List<string> GetDTOFields<T>()
{
var fields = typeof(T).GetProperties();
return fields.Select(i => i.Name).ToList();
}

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

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

         /// <summary>
/// 获取Entity实体中的字段
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="isFullName">true:字段名前面包含表名</param>
/// <returns></returns>
public static List<string> GetFields<T>(bool isFullName)
{
var fields = typeof(T).GetProperties();
var result = new List<string>();
if (isFullName)
{
var tablename = EntityHelper.GetTableName<T>();
result.AddRange(fields.Select(i => tablename + "." + i.Name));
return result;
}
result.AddRange(fields.Select(i => i.Name));
return result;
} /// <summary>
/// 获取实体中的字段,包括表名,使用","连接
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static string GetFiledString<T>()
{
var list = GetFields<T>(true).ToArray();
var result = string.Join(",", list);
return result;
}

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

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

         /// <summary>
/// 获取实体代表的表名
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static string GetTableName<T>()
{
var tablename = typeof(T).GetCustomAttributes(typeof(TableNameAttribute), true);
return ((TableNameAttribute)tablename[]).TableName;
} public static string GetTableName(Type entityType)
{
try
{
var tablename = entityType.GetCustomAttributes(typeof(TableNameAttribute), true);
return ((TableNameAttribute)tablename[]).TableName;
}
catch
{
throw new Exception("没有配置TableName特性!");
} }

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

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

         /// <summary>
/// 获取实体主键名称
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static string GetPrimaryKey<T>()
{
var primary = typeof(T).GetCustomAttributes(typeof(PrimaryAttribute), true);
var pri = typeof(T).GetProperties();
foreach (var i in pri)
{
var pris = i.GetCustomAttributes(typeof(PrimaryAttribute), true);
if (pris.Any())
{
return i.Name;
}
}
return "";
}

SqlHelper简单实现(通过Expression和反射)3.实体,数据传输对象(DTO)Helper类设计的更多相关文章

  1. 基于Java反射的map自动装配JavaBean工具类设计

    我们平时在用Myabtis时不是常常需要用map来传递参数,大体是如下的步骤: public List<Role> findRoles(Map<String,Object> p ...

  2. SqlHelper简单实现(通过Expression和反射)1.引言

    之前老大说要改变代码中充斥着各种Select的Sql语句字符串的情况,让我尝试着做一个简单的SqlHelper,要具有以下功能: 1.不要在业务代码中暴露DataTable或者DataSet类型: 2 ...

  3. .NET基础篇——利用泛型与反射更新实体(ADO.NET Entity Framework)(转)

    自从ADO.NET Entity Framework面世以来,受到大家的热捧,它封装了大量代码生成的工具,用户只需要建立好实体之间的关系,系统就是会为用户自动成功了Add.Delete.CreateO ...

  4. 菜鸟类库诞生记二:通过反射转换DataRow为对象

    虽然大数据量的环境下,通过反射转换DataRow为对象性能会很低,但是在数据量适中的时候,这样能够减少很多的代码量,性能也确实不错. 所以在数据量不是很大的情况下,推荐使用. 如果数据量很大,可以使用 ...

  5. JAVA基础知识之JVM-——使用反射生成并操作对象

    Class对象可以获取类里的方法,由Method对象表示,调用Method的invoke可以执行对应的方法:可以获取构造器,由Constructor对象表示,调用Constructor对象的newIn ...

  6. c# 反射得到实体类的字段名称和值,DataTable转List<T>

    /// <summary> /// 反射得到实体类的字段名称和值 /// var dict = GetProperties(model); /// </summary> /// ...

  7. Java反射机制(创建Class对象的三种方式)

    1:SUN提供的反射机制的类: java.lang.Class<T> java.lang.reflect.Constructor<T> java.lang.reflect.Fi ...

  8. java jdbc ResultSet结果通过java反射赋值给java对象

    在不整合框架的情况下,使用jdbc从数据库读取数据时都得一个个的get和set,不仅累代码还显得不简洁,所以利用java的反射机制写了一个工具类,这样用jdbc从数据库拿数据的时候就不用那么麻烦了. ...

  9. 反射, getClass(), 和something.class以及类型类(转)

    原文地址:http://www.cnblogs.com/lianghui66/archive/2012/12/03/2799134.html 所谓反射,可以理解为在运行时期获取对象类型信息的操作.传统 ...

随机推荐

  1. 运行cotroller后,查看vuser日志为空

    查看C:\Users\***\AppData\Local\Temp\res\log下,文件夹空,处理如下 run-time-setting中,选中always send message

  2. mock调用返回值是void类型

    //调用void方法 doNothing().when(templateWrapper).process();// doCallRealMethod().when(templateWrapper).p ...

  3. Codeforces 460E Roland and Rose(暴力)

    题目链接:Codeforces 460E Roland and Rose 题目大意:在以原点为圆心,半径为R的局域内选择N个整数点,使得N个点中两两距离的平方和最大. 解题思路:R最大为30.那么事实 ...

  4. 【spring boot】在spring boot下使用多线程

    使用场景: 方法处理到某一步,需要将信息交给另一个线程去处理!! =================================================================== ...

  5. 第一百八十二节,jQuery-UI,知问前端--日历 UI

    jQuery-UI,知问前端--日历 UI 学习要点: 1.调用 datepicker()方法 2.修改 datepicker()样式 3.datepicker()方法的属性 4.datepicker ...

  6. python学习---简介

    http://www.cnblogs.com/wuguanglei/p/3866583.html http://www.cnblogs.com/wuguanglei/p/3866583.html ok ...

  7. Muduo网络库源代码分析(六)TcpConnection 的生存期管理

    TcpConnection是使用shared_ptr来管理的类,由于它的生命周期模糊.TcpConnection表示已经建立或正在建立的连接.建立连接后,用户仅仅须要在上层类如TcpServer中设置 ...

  8. java php 3des实现

    php.java.android.ios通用的3des方法:http://blog.csdn.net/zcjwsrf/article/details/47659137 PHP使用3DES算法加密解密字 ...

  9. SAP FI 中4个特殊期间

    标准SAP ERP里面有个13-16的4个特殊的会计期间,这4个特殊的会计期间如何使用?作用是什么? SAP记帐期间变式,会计年度与特殊期间. 记帐期间变式是较难理解的一个内容.不过要表达的内容很简单 ...

  10. List ArrayList LinkedList 集合三

    因为List是有顺序的说以API中定义了 方法来处理List Collections 接口:用于操作List集合有排序sort(list);查找int binarySearch(List,obj);c ...