当前位置: 代码迷 >> .NET Framework >> 求高手赐教~怎么用DbContext将DbDataReader转换为实体类型的对象
  详细解决方案

求高手赐教~怎么用DbContext将DbDataReader转换为实体类型的对象

热度:125   发布时间:2016-05-01 23:32:20.0
求高手赐教~如何用DbContext将DbDataReader转换为实体类型的对象?
之前用ObjectContext是这样写的:
public virtual List<U> ExecuteProcedure<U>( string procName , params DbParameter[] Parameters )
{
     ........
    var rdr = com.ExecuteReader();
    list = context.ObjectContext.Translate<U>(rdr).ToList();
    ....
}

现在用EF 5,换成了DbContext,请问应该如何实现?求教~~
------解决方案--------------------
从 DbDataReader 本身就可以轻松读取实体对象。

例如你有类型
public class MyObj
{
    public string Name;
    public double Value;
}


那么你可一写

            List<MyObj> result;
            using (var conn = new OracleConnection(cnStr))
            {
                conn.Open();
                var comm = conn.CreateCommand();
                comm.CommandText = "select * from ..........";
                comm.CommandType = System.Data.CommandType.Text;
                result = ( from DbDataRecord record in comm.ExecuteReader()
                            select new TableDefine { 
                                            Name = (string)record["TheName"],
                                            Value = (double)record["Number"]
                                       };
                         ).ToList();
            }   
 

来直接读取。或者如果你是自己写了一个 DBHelper 中封装了“Query方法”,那么你可以把这里的 select 部分定义为一个委托,例如
public void Query<T>(string sql, DbParameter[] Parameters,Func<DbDataReader, T> formater)
{
    ............
                result = ( from DbDataRecord record in comm.ExecuteReader()
                            select formater(record)).ToList();
    ............
    


根本用不着借助 EF 这种东西。