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. [转]jsonp详解

    jsonp详解 json相信大家都用的多,jsonp我就一直没有机会用到,但也经常看到,只知道是“用来跨域的”,一直不知道具体是个什么东西.今天总算搞明白了.下面一步步来搞清楚jsonp是个什么玩意. ...

  2. 如何解决局域网中Windows防火墙不能访问Oracle问题!

    在防火墙例外中,添加端口1521端口就样局域网内的其他机器就可以访问你的ORACLE了. 在防火墙的入站规则中,新建端口规则.过程如下例图片所示:

  3. PCB焊接工艺

    1. 有铅焊接工艺    240~260℃. 2. BGA焊盘直径为球径80%.

  4. csla 与高cpu

    在项目中一直使用csla 4.13. 项目一直正常,但是偶尔会出现iis占用的cpu 突然100%, 后面客户量大的情况,加入了缓存的机制.100%的情况出现的更多了. 当时有数据库死锁的原因.cpu ...

  5. Easyui tree方法扩展getImperfectCheck

    $.extend($.fn.tree.methods, { getImperfectCheck : function (jq) { var checked = jq.find("span.t ...

  6. 1501: 货币系统(money)

    1501: 货币系统(money) 时间限制: 1 Sec  内存限制: 64 MB 提交: 33  解决: 12 [提交][状态][讨论版] 题目描述 母牛们不但创建了它们自己的政府,而且选择建立了 ...

  7. keycode 大全,javascript 再也不用操心我不知道的keycode了

    keycode    8 = BackSpace BackSpace keycode    9 = Tab Tab keycode   12 = Clear keycode   13 = Enter ...

  8. tomcat启动不起来,不知原因,没有报错日志,控制台一闪而过 怎么办

    在startup.bat文件中 编辑,在最后一行回车 加上一个词pause,暂停,然后再启动就看见控制台的错误信息啦,然后就自己解决吧

  9. 网页或WEB应用或PC端浏览器调用百度地图API

    今天在写微网页中遇见了调用百度地图这个问题:在一个容器中显示地图信息如图(设计图截图) 然后在网上查了接口:http://api.map.baidu.com/,就是这个东东,当然不止这个,还有几个必选 ...

  10. Android UI开发第二十九篇——Android中五种常用的menu(菜单)

    Android Menu在手机的应用中起着导航的作用,作者总结了5种常用的Menu. 1.左右推出的Menu 前段时间比较流行,我最早是在海豚浏览器中看到的,当时耳目一新.最早使用左右推出菜单的,听说 ...