C#发现之旅:基于反射和动态编译的快速ORM框架(上)
2010-09-30 21:08:28 来源:WEB开发网InnerReadRecord需要代码生成器来生成代码进行扩展,对于DB_Employees,其扩展的代码为
protected override object InnerReadRecord( System.Data.IDataReader reader , int[] FieldIndexs )
{
MyORM.DB_Employees record = new MyORM.DB_Employees();
int index = 0 ;
index = FieldIndexs[ 0 ]; // 读取字段 EmployeeID
if( index >= 0 )
{
record.EmployeeID = ConvertToInt32( reader.GetValue( index ) , ( int ) 0) ;
}
index = FieldIndexs[ 1 ]; // 读取字段 LastName
if( index >= 0 )
{
record.LastName = ConvertToString( reader.GetValue( index ) , null ) ;
}
读取其他字段值……
return record ;
}
在这段自动生成的代码中,参数reader就是类型为IDataReader的数据读取器,而FieldIndexs就是GetFieldIndexs的返回值。在InnerReadRecord函数中会一次读取FieldIndexs的元素值,根据属性的数据类型而调用ConvertToInt32,ConvertToString等一系列的ConvertTo函数,而这一系列的函数已经在基础类型RecordORMHelper中定义好了。
从这个自动生成的代码可以看出,ORM框架使用实体类的属性,GetFieldIndexs和数据读取器实现了如下的映射过程
更多精彩
赞助商链接