SqlHelper简单实现(通过Expression和反射)4.对象反射Helper类
2024-08-28 23:24:51
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;
}
}
最新文章
- 时光煮雨 Unity3D实现2D人物移动-总结篇
- CF687C. The Values You Can Make[背包DP]
- HDU 4135 Co-prime(容斥原理)
- jQuery的无new实例化
- WPF 判断是否为设计(Design)状态
- CABasicAnimation(CAKeyframeAnimation)keypath 取值
- 如何查找到文件以后,带目录一起拷贝到新的目录? cp --parents source destination
- JAVA I/O流 之入门
- jQuery图片切换插件jquery.cycle.js
- pip --upgrade批量更新过期的python库
- redis集群添加删除节点
- POJ-3617 Best Cow Line---字符串贪心
- inner join on (程序测试验证结果。) _学习贴
- informix 随笔
- Tensoflow API笔记(N) 设备指定
- 行为型---命令模式(Command Pattern)
- hdu 1978 How many ways(记忆化搜索)
- sqlserver2012 offset分页
- 第三个spring冲刺第8天
- opencv 学习资料