ObjectHelper的主要功能有:

1.通过反射获取Entity的实例的字段值和表名,跳过自增键并填入Dictionary<string,string>中。

 namespace RA.DataAccess.Common
{
internal static class ObjectHelper
{
/// <summary>
/// 获取Entity实例的字段名和值(用于更新和插入数据)
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static Dictionary<string,object> GetKeyValue(object obj){
var data = new Dictionary<string, object>();
foreach (var i in obj.GetType().GetProperties())
{
if (IsContainsAttribute(i.GetCustomAttributes(true))) continue;
var value = obj.GetType().GetProperty(i.Name).GetValue(obj, null);
data.Add(i.Name, value);
}
return data;
} /// <summary>
/// 是否包含自增键,在插入表时可以跳过自增键的设置
/// </summary>
/// <param name="attrs"></param>
/// <returns></returns>
private static bool IsContainsIndentityAttribute(IEnumerable<object> attrs)
{
return attrs.OfType<IdentityAttribute>().Any();
}
}
}

2.通过反射,为实例赋值,此处只是列举了常用的数据类型:int,string和DataTime

         /// <summary>
/// 为通过反射生成的实例赋值
/// </summary>
/// <typeparam name="T">实例的类型</typeparam>
/// <param name="obj">实例</param>
/// <param name="value">值</param>
/// <param name="key">成员名称</param>
public static void SetValue<T>(ref T obj, Object value, String key) where T : class
{
var property = obj.GetType().GetProperty(key);
var type = property.PropertyType.Name;
if (value is System.DBNull)
{
property.SetValue(obj, null, null);
return;
}
switch (type)
{
case "Int32":
property.SetValue(obj, int.Parse(value.ToString()), null);
break;
case "String":
property.SetValue(obj, value.ToString(), null);
break;
case "DateTime":
property.SetValue(obj, (DateTime)value, null);
break;
default:
property.SetValue(obj, value, null);
break;
}
}

SqlHelper简单实现(通过Expression和反射)4.对象反射Helper类的更多相关文章

  1. 一篇文章看懂java反射机制(反射实例化对象-反射获得构造方法,获得普通方法,获得字段属性)

    Class<?> cls = Class.forName("cn.mldn.demo.Person"); // 取得Class对象传入一个包名+类名的字符串就可以得到C ...

  2. tp 框架 利用反射实现对象调用方法

    <?php class Person{ public $name="xiaoming"; function say(){ echo "i am ".$th ...

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

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

  4. SqlHelper简单实现(通过Expression和反射)6.Providor模式(工厂+策略)可配置数据库选择

    基本思想,将MsSqlDbUtility和MySqlDbUtility设计成单例模式,通过App.config或Web.config进行默认的数据库设置,然后通过DbUtilityFactory获取D ...

  5. C#反射实现 C# 反射 判断类的延伸类型 使用代码生成工具Database2Sharp快速生成工作流模块控制器和视图代码 C# ADO.NET的SqlDataReader对象,判断是否包含指定字段 页面中添加锚点的几种方式 .net 简单实用Log4net(多个日志配置文件) C# 常用小点

    C#反射实现   一.反射概念: 1.概念: 反射,通俗的讲就是我们在只知道一个对象的内部而不了解内部结构的情况下,通过反射这个技术可以使我们明确这个对象的内部实现. 在.NET中,反射是重要的机制, ...

  6. 简单的图形学(二)——材质与反射

    在上一篇[游戏框架系列]简单的图形学(一)文章中,我们讲述了光线追踪的一个最简单的操作--依每个像素延伸出一条追踪光线,光线打到球上(产生交点),就算出这条线的长度,作为最终的灰度,打不到球上,就显示 ...

  7. 6.秋招复习简单整理之请你谈谈JDBC的反射,以及它的作用?

    通过反射com.mysql.jdbc.Driver类,实例化该类时会调用该类的静态代码块,该代码块会去java的DriverManager类中注册自己,DriverManager管理所有已注册的驱动类 ...

  8. JAVA基础 (二)反射 深入解析反射机制

    在谈论到反射这个问题时,你是否有例如以下疑问? 不管是在.NET还是Java中反射的原理和机制是一样的,理解了一种还有一种就能够迎刃而解,想要理解反射首先须要了解底层的一些概念和执行.理解了反射有助于 ...

  9. Java 反射机制[Method反射]

    Java 反射机制[Method反射] 接着上一篇Java 反射机制[Field反射],通过调用Person类的setName方法将obj的name字段的Value设置为"callPerso ...

  10. .NET 利用反射将对象数据添加到数据库

    .NET 利用反射将对象数据添加到数据库   一些小型的项目,在不使用其他的框架(LINQ,NHibernate,EF等等框架)的前提下,这时候一些反复的增删改查就会让我们感到极其的繁琐,厌烦,为了避 ...

随机推荐

  1. 第二百零五节,jQuery EasyUI,Messager(消息窗口)组件

    jQuery EasyUI,Messager(消息窗口)组件 学习要点: 1.加载方式 2.属性列表 3.方法列表 本节课重点了解 EasyUI 中 Messager(消息窗口)组件的使用方法,这个组 ...

  2. MATLAB中的文件类型总结

    %   ***.m文件 : 脚本文件或者函数文件或者:%   ***.mat文件:数据存储文件(二进制文件,可以ASCII码形式保存和加载,%                类似于单行EXCEL表格) ...

  3. 隐式意图调用系统自带组件的各种Uri总结

    调用系统应用解析(必需要加各自使用的权限)  android intent 隐式意图和显示意图(activity跳转) 显示意图要求必须知道被激活组件的包和class 隐式意图仅仅须要知道跳转acti ...

  4. 蓝桥杯 第四届C/C++预赛真题(1) 高斯日记(数学题,年份处理)

    题目标题: 高斯日记 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯 ...

  5. RelativeSource.TemplatedParent 属性wpf

    今天看到这一句代码时候,自己只是知道绑定了,可是不知道绑定了什么啊 就去查了一下,后来说的好像是绑定的TemplateParent返回的 一个值.可是这是为什么呢, 有的说是绑定的是一个资源. 下面有 ...

  6. 4190. Prime Palindromes 一亿以内的质数回文数

    Description The number 151 is a prime palindrome because it is both a prime number and a palindrome ...

  7. php 使用curl 进行简单模拟提交表单

    //初始化curl $ch = curl_init(); $url = 'xxx'; $option = [ CURLOPT_URL => $url, CURLOPT_HEADER => ...

  8. linux配置sftp用户的chroot步骤(用户的sftp根文件夹)

    1.编辑ssh中的sftp的配置,命令可能是:vi /etc/ssh/sshd_config 在这个文件里最后增加 #限制sftp组的用户使用sftp时在自己的home文件夹下 Match Group ...

  9. [转]C# 获取指定目录下所有文件信息、移动目录、拷贝目录

    原文:http://blog.csdn.net/vchao13/article/details/6200255 1.获取指定目录下所有文件信息 /// <summary> /// 返回指定 ...

  10. Java中匿名内部类

    匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名内部类来实现抽象 ...