Я унаследовал проект, содержащий около 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));
}