C#自动装载数据到实体

这个类可能并没有像你所想的那么灵活,不过能用,欢迎大家提出修改意见

使用说明:

项目中的实体类必须和数据库的表结构一样,否则无法正常使用

在编译环境VS2008 操作系统WIN2003,XP下通过

调用类的源代码如下:

//---------------------------------------------------------------------
// <copyright file="FormartPropty.cs" company="RichCn INC">
//   Information Contained Herein is Proprietary and Confidential.
//   Author: 谭辉 (neumik@163.com)
// </copyright>
// <summary>
// 数据动态实体化处理类
// 开发环境:VS2008
// 注意事项:定义的实体类的属性名称 必须与数据库字段名一致 否则无法正常使用,可用LINQ TO SQL 或者动软生成器动态生成实体类
// </summary>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace Common
{
public class FormartPropty<T>
{
public T obj;
public FormartPropty(T obj, DataRow row)
{
Type type = typeof(T);
var props = type.GetProperties();
foreach (var item in props)
{
///如果DataRow里也包括此列
if (row.Table.Columns.Contains(item.Name))
{
///将DataRow指定列的值赋给value
object value = row[item.Name];
///如果value为null则返回
if (value == DBNull.Value) continue;
///将值做转换
if (item.PropertyType.Equals(typeof(string)))
{
value = row[item.Name].ToString();
}
else if (item.PropertyType.Equals(typeof(int)))
{
value = Convert.ToInt32(row[item.Name]);
}
else if (item.PropertyType.Equals(typeof(decimal)))
{
value = Convert.ToDecimal(row[item.Name]);
}
else if (item.PropertyType.Equals(typeof(DateTime)))
{
value = Convert.ToDateTime(row[item.Name]);
}
else if (item.PropertyType.Equals(typeof(double)))
{
value = Convert.ToDouble(row[item.Name]);
}
else if (item.PropertyType.Equals(typeof(bool)))
{
value = Convert.ToBoolean(row[item.Name]);
}
///利用反射自动将value赋值给obj的相应公共属性
item.SetValue(obj, value, null);
}
}
this.obj = obj;
}
}
}

 

调用方法:

假设有个USER类,传入的参数为DATAROw

FormartPropty<User> fp = new FormartPropty<User>(new User(), vResult.Tables[0].Rows[0]);
return fp.obj; //fp.obj就是装载完成后的实体

 

posted @ 2011-08-05 18:19  心际迷航  阅读(412)  评论(0编辑  收藏  举报