利用反射给实体动态赋值麻烦帮忙解释下

taiyonghai 2010-01-26 02:54:15
请各位大侠帮忙看看我从网上查资料在自己写写弄出来了,但好多代码还不不太明白,还请帮忙注释解释下每句代码什么意思,写写各位先。
/// <summary>
/// 利用反射根据DataReader和实体对象动态为实体赋值
/// </summary>
/// <param name="reader">数据源DataReader</param>
/// <param name="targetObj">实体对象</param>
private void GetReaderToObject(IDataReader reader, object targetObj)
{
for (int i = 0; i < reader.FieldCount; i++)
{
string columnName = reader.GetName(i);
object columnValue = reader.GetValue(i);
PropertyInfo property = targetObj.GetType().GetProperty(columnName);
if (property != null)
{
if (columnValue != DBNull.Value)
{
if (property.PropertyType.IsEnum)
{
object enumName = Enum.ToObject(property.PropertyType, columnValue);
property.SetValue(targetObj, enumName, null);
}
else
{
property.SetValue(targetObj, columnValue, null);
}
}
}

}
}
...全文
306 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
taiyonghai 2010-03-01
  • 打赏
  • 举报
回复
恩搞定了,谢谢,谢谢,谢谢
taiyonghai 2010-01-30
  • 打赏
  • 举报
回复
很深呀,还是看不太懂呵呵~
yagebu1983 2010-01-30
  • 打赏
  • 举报
回复
好像给枚举对象赋值。。。
wuyq11 2010-01-30
  • 打赏
  • 举报
回复
private void GetReaderToObject(IDataReader reader, object targetObj)
{
for (int i = 0; i < reader.FieldCount; i++)
{
string columnName = reader.GetName(i); //获取字段名称
object columnValue = reader.GetValue(i); //字段值
PropertyInfo property = targetObj.GetType().GetProperty(columnName); //获取实体对象属性
if (property != null)
{
if (columnValue != DBNull.Value)
{
if (property.PropertyType.IsEnum) //属性类型是否表示枚举
{
object enumName = Enum.ToObject(property.PropertyType, columnValue);
property.SetValue(targetObj, enumName, null); //获取枚举值,设置属性值
}
else
{
property.SetValue(targetObj, columnValue, null);
}
}
}

}
http://msdn.microsoft.com/zh-cn/library/system.reflection.propertyinfo.aspx
}
  • 打赏
  • 举报
回复
就是假设字段名就是Property名,然后一一SetValue啊。这个代码很浅显,无法再去解释什么了。

实际上,不应该处理Property,而应该处理Field。ORM应该处理field而不应该处理property,这是一个很重要的问题。仔细搞清楚这个问题,可以对ORM做的更深更好。
jinjie1212 2010-01-30
  • 打赏
  • 举报
回复
帮忙顶
happy664618843 2010-01-30
  • 打赏
  • 举报
回复
注重基础 基础看懂这个就懂了
mail_ricklee 2010-01-26
  • 打赏
  • 举报
回复
参考FortuneBase
参考地址www.cnblogs.com/mail-ricklee

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧