EF 6-使用SqlQuery返回数据,然后使用DataReader映射结果集

时间:2018-11-22 02:19:26

标签: oracle entity-framework-6 enterprise-library datareader

我继承了一个项目,该项目包含使用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));
     }

0 个答案:

没有答案