惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Vercel News
Vercel News
博客园 - 【当耐特】
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
aimingoo的专栏
aimingoo的专栏
WordPress大学
WordPress大学
G
Google Developers Blog
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
P
Proofpoint News Feed
J
Java Code Geeks
U
Unit 42
云风的 BLOG
云风的 BLOG
阮一峰的网络日志
阮一峰的网络日志
N
Netflix TechBlog - Medium
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
D
Docker
V
Visual Studio Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Help Net Security
V
V2EX
T
Tailwind CSS Blog

博客园 - w i n s o n

Claude Code 的替代品:OpenCode — 开源免费的 AI 编程神器 使用Ajax生成的Excel文件并下載 CBMVC For Titanium Alloy 发布! CBMVC Titanium Framework 介绍 .Net插件框架的实现及分析(三) .Net插件框架的实现及分析(二) .Net插件框架的实现及分析(一) 在类库中调用资源文件实现国际化! Javascript下调用.Net资源文件,实现语言国际化 让 PowerDesigner 支持 SQLite! 理解依赖注入及其好处! 图文说明如何使用T4在VS2008里生成代码 Winson.Framework 3.3 发布!! Silverlight学习问题总结(一) Winson.Framework 3.2 发布!!! Winson.Framework 3.0 正式发布!! Winson.Framework 2.5 发布! Winson.SqlPager 2.5 发布! [心得]VS2008免编译立即生效的方法
通过反射自动填充实体
w i n s o n · 2009-04-06 · via 博客园 - w i n s o n

通过反射自动填充实体

2009-04-06 11:12  w i n s o n  阅读(787)  评论()    收藏  举报

之前在完成自己的小型框架时,为了动态去填充实体,于是想到了以下方法,直接通过反射可自动对实体进行填充,这样就不需要每个实体属性去赋值这么麻烦了:

 1         /// <summary>
 2         /// 填充实体内容
 3          /// </summary>
 4         /// <param name="targetObj">实体对象</param>
 5         /// <param name="dr">DbDataReader对象</param>
 6         protected void FillDS(object targetObj, DbDataReader reader)
 7         {
 8             try
 9             {
10                 //实现首字母大写,规范所有属性名称
11                 System.Globalization.CultureInfo cult = System.Threading.Thread.CurrentThread.CurrentCulture;
12                 System.Globalization.TextInfo textInfo = cult.TextInfo;
13                 string name = string.Empty;
14 
15                 for (int i = 0; i < reader.FieldCount; i++)
16                 {
17                     //使用首字母大写转换,规范属性名以进行匹配
18                     name = textInfo.ToTitleCase(reader.GetName(i).ToLower());
19                     //根据属性名反射获取属性
20                     PropertyInfo propertyInfo = targetObj.GetType().GetProperty(name);
21                     if (propertyInfo != null)
22                     {
23                         //如果值不为空以及属性为可写,则进行写入操作
24                         if (reader.GetValue(i) != DBNull.Value && propertyInfo.CanWrite)
25                         {
26                             //为属性设置值
27                             propertyInfo.SetValue(targetObj, reader.GetValue(i), null);
28                         }
29                     }
30                 }
31             }
32         }