0

映射具有超过 150 列的关系表的最佳方法是什么。我不想使用任何第三方或实体框架。如果我使用的是数据阅读器,则很难编写所有列并将其转换为相关类型。

有没有简单的方法可以做到这一点,或者这是唯一的方法?

 SqlDataReader _dr = _sqlCom.ExecuteReader() ;

        Info inObj= new Info ();


        while (_dr.Read())
        {

            inObj.a=  (int)_dr["a"];
            inObj.b= (int)_dr["b"];
            inObj.c= (int)_dr["c"];
            inObj.d= (int)_dr["d"];
            inObj.e= (int)_dr["e"];
            .....

            ......
        }
4

2 回答 2

0

如果你想为你完成它,你需要使用 ORM,那里有一些好的,比如Dapper,或者使用反射(但会慢一些)。否则你需要自己处理这一切。但是,您可以多写几行代码来消除强制转换,而不是丑陋的转换,并且可能会表现得更好

SqlDataReader _dr = _sqlCom.ExecuteReader() ;


Info inObj = new Info();

if (!_dr.HasRows) { return; }

int aPosition = _dr.GetOrdinal("a");}
int bPosition = _dr.GetOrdinal("b");
int cPosition = _dr.GetOrdinal("c");
int dPosition = _dr.GetOrdinal("d");
int ePosition = _dr.GetOrdinal("e");

while (_dr.Read())
{
    inObj.a = _dr.GetInt32(aPosition);
    inObj.b = _dr.GetInt32(bPosition);
    inObj.c = _dr.GetInt32(cPosition);
    inObj.d = _dr.GetInt32(dPosition);
    inObj.e = _dr.GetInt32(ePosition);

    .....

    ......
}
于 2013-05-31T20:21:16.723 回答
0

你可以使用反射,如果你可以承受性能损失的话。像这样的东西应该工作:

SqlDataReader reader = ...;
var propertyMappings = typeof (Info).GetProperties(BindingFlags.Instance | BindingFlags.Public)
    .Select(p => new {Property = p, Ordinal = reader.GetOrdinal(p.Name)})
    .ToList();
while (reader.Read())
{
    var info = new Info();
    foreach (var propertyMapping in propertyMappings)
        propertyMapping.Property.SetValue(info, reader[propertyMapping.Ordinal]);
}
于 2013-05-31T20:16:41.387 回答