我继承了一个项目,该项目包含使用Enterprise Library编码的大约80个存储过程调用。我需要从项目中删除企业库,然后将其转换为使用Entity Framework 6。该代码具有以下几个功能:
public UsersInfo GetByUserId(string userId)
{
UsersInfo user = null;
using (IDataReader rdr = MyDataGateway.DefaultInstance.Database.ExecuteReader(MySproc, new object[] { userId, null }))
{
if (rdr.Read())
{
user = FillModelObject(rdr);
}
}
return user;
}
FillObjectModel
函数要求使用IDataReader
类型。
我发现一个SO Post似乎在解释如何将EF与DataReader一起使用,但是该示例在其中的任何地方都没有DataReader对象。因此,我无法弄清楚示例代码如何帮助我。另外,示例代码希望将一列作为字符串返回,但是我需要此代码来处理80种不同的模型。我还应该指出,UsersInfo模型与从sproc返回的列不匹配,这是所有80个sproc的同一类型的问题。我想避免研究所有80个存储过程以准确确定返回模型的需求。我的目标是删除企业库DLL引用。
FillObjectModel:
private UsersInfo FillModelObject(IDataReader rdr)
{
if (loadOrdinals)
{
ORD_USER_SEQ_ID = rdr.GetOrdinal("USER_SEQ_ID");
ORD_FIRST_NM = rdr.GetOrdinal("FIRST_NM");
ORD_LAST_NM = rdr.GetOrdinal("LAST_NM");
ORD_CT_GUID_ID = rdr.GetOrdinal("CT_GUID_ID");
ORD_CT_USER_ID = rdr.GetOrdinal("CT_USER_ID");
ORD_EMAIL_TX = rdr.GetOrdinal("EMAIL_TX");
ORD_DELETE_DT = rdr.GetOrdinal("DELETE_DT");
loadOrdinals = false;
}
return new UsersInfo(
rdr.GetInt64(ORD_USER_SEQ_ID.Value),
rdr.GetString(ORD_FIRST_NM.Value),
rdr.GetString(ORD_LAST_NM.Value),
rdr.GetString(ORD_CT_GUID_ID.Value),
rdr.GetString(ORD_CT_USER_ID.Value),
rdr.GetString(ORD_EMAIL_TX.Value),
rdr.IsDBNull(ORD_DELETE_DT.Value) ? (DateTime?)null : rdr.GetDateTime(ORD_DELETE_DT.Value));
}