EF 6 - вернуть данные с помощью SqlQuery, а затем использовать DataReader для сопоставления набора результатов - PullRequest
0 голосов
/ 22 ноября 2018

Я унаследовал проект, содержащий около 80 вызовов хранимых процедур, закодированных с использованием Enterprise LibraryМне нужно удалить Enterprise Library из проекта и преобразовать его для использования 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 sprocs.Я хотел бы не исследовать все 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));
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...