using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Reflection;
public class ModelFactory
{
/// <summary>
/// 获取指定类型的模型
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="reader"></param>
/// <returns></returns>
public static T GetModel<T>(SqlDataReader reader)
{
Type t=typeof(T);
T item = (T)Assembly.GetAssembly(t).CreateInstance(t.FullName);
using (reader)
{
if (reader.Read())
{
for (int i = 0; i < reader.FieldCount; i++)
{
string fieldName = reader.GetName(i).ToLower();
if (reader[i] != DBNull.Value)
{
foreach (PropertyInfo pi in t.GetProperties())
{
if (pi.Name.ToLower().Equals(fieldName))
{
pi.SetValue(item,reader[fieldName],null);
break;
}
}
}
}
}
}
return item;
}
/// <summary>
/// 获取指定类型对象的列表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="reader"></param>
/// <returns></returns>
public static List<T> GetList<T>(SqlDataReader reader)
{
List<T> list = new List<T>();
Type t=typeof(T);
using (reader)
{
while (reader.Read())
{
T item = (T)Assembly.GetAssembly(t).CreateInstance(t.FullName);
for (int i = 0; i < reader.FieldCount; i++)
{
string fieldName = reader.GetName(i).ToLower();
if (reader[i] != DBNull.Value)
{
foreach (PropertyInfo pi in t.GetProperties())
{
pi.SetValue(item,reader[fieldName],null);
break;
}
}
}
list.Add(item);
}
}
return list;
}
}
本文介绍了一个通用的.NET框架下的ModelFactory类,该类能够从SqlDataReader中动态创建并填充指定类型的对象及其列表。通过反射机制实现了字段的自动匹配与赋值。
3651

被折叠的 条评论
为什么被折叠?



