在C#中将数据表填充到具有大量属性的数据模型的最佳方法

时间:2015-08-26 18:53:03

标签: c# reflection datatable

我有一个大型机数据库,我使用ODBC从中导出500 000条记录。现在我必须将数据表填充到数据模型(对象)中。 数据模型或类具有150多个属性,需要从数据表填充。我在每个数据流的每次迭代中都使用反射。我可以使用列表或阅读器属性从数据表填充,但我必须定义150个成员。为了避免并使其更通用,我选择使用反射。

 DataModel model = null;
//DataModel  is a class containing various properties 
//i.e public class DataModel
//{
//  public string Name {get;set;}
 // public string Role {get;set;}
//etc....150 properties
//}

    dt = new DataTable();
    using(OdbcDataReader reader = cmd.ExecuteReader())
    {
    DatatTable dtSchema = reader.GetSchemaTable();
    List<DataColumn> listCols = new List<DataColumn>();
    if(dtSchema != null)
    {
     foreach(DataRow drow in dtSchema.Rows)
    {
    string ColName = Convert.ToString(drow["ColumnName"]);
    DataColumn column = new DataColumn(columnName,(Type)(drow["DataType"]));
    listCols.Add(column);
    dt.Columns.Add(column);
    }
    PropertyInfo[] properties = typeof(DataModel).GetProperties();

    while(reader.Read())
    {
    DataRow dataRow = dt.NewRow();
    for(int i = 0; i < listCols.COunt; i++)
    {

    dataRow[((DataCOlumn)listCols[i])]
    }
    dt.Rows.Add(dataRow);

    model = new DataModel();
    foreach(PropertyInfo property in properties)
    {
      if(dt.Columns.Contains(property.Name))
        SetValue(model,property.name,dataRow[property,name]);

    }
    if(model != null) lst.Add(model);
    }

    }

我通过使用这种反射方法得到例外。可以纠正上述问题并采用任何不同的方法吗?我在每个数据流的每次迭代中都使用反射。请告诉我除了反思之外还有其他任何好的或更高性能的方法。 (请注意,我有超过150个需要填充的属性)

0 个答案:

没有答案