之前用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 这种东西。