玻璃*杯

软海拾贝
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

最近连续看到几篇关于把DataRow映射为实体类的Helper

http://www.cnblogs.com/inday/archive/2008/12/23/1360495.html 

http://www.cnblogs.com/yyliuliang/archive/2008/12/22/1358736.html 

但是这2个helper都有不全,就是对NullAble和Enum都支持的不好。

如:以下的测试代码,对于Nullable类型,都不能通过测试,枚举类型

[Test]
        
public void T3()
        
{
            var table 
= new DataTable("table");
            table.Columns.Add(
new DataColumn("s"typeof(string)));
            table.Columns.Add(
new DataColumn("i"typeof(string)));
            table.Columns.Add(
new DataColumn("b"typeof(string)));

            DataRow row 
= table.NewRow();
            row[
"s"= "s";
            row[
"i"= "1";
            row[
"b"= "true";

            var info 
= ModelHelper.ConvertModel<Model>(row);
            Assert.IsNotNull(info);
            Assert.AreEqual(info.B, 
true);
            Assert.AreEqual(info.i, 
1);
            Assert.AreEqual(info.S, 
"s");
        }

public class Model
    
{
        
public string S getset; }
        
public E1 E1 getset; }
        
public int? i getset; }
        
public bool B getset; }
    }


    
public enum E1
    
{
        a,
        b,
        c
    }

我现在的MVC项目中的Helper也有DataRowToModel的代码,对Nullable和Enum实现了兼容。

主要代码为如下的转换代码(ps:这边分代码是更具MVC中的相关代码简化改进而来,MVC中还支持复杂类型)

Code

 下面是测试代码

Code

 
前2天刚好看到”时不我待“的

自己动手写个ORM实现(4) 关于反射DataRow数据记录到实体性能的优化

写这篇文章的时候顺便做了一下测试,比较一下lambda语法和反射的语法到底是否如”时不我待“说的那样有数量级上的区别

但是测试的结果确大大出乎意料,是数量级上的区别不过是相反的,反射时间远远小于lambad语法的时间

测试1W次,反射时间:197 lambad时间:5574

下面是我的测试代码

Code

下面是sln,包含class和测试

/Files/haptear/Helper.rar