Есть ли способ доступа к набору результатов и выходным параметрам из хранимой процедуры, добавленной в качестве функции импорта в модели Entity Framework?Доступ к выходным параметрам хранимой процедуры И результирующий набор в Entity Framework?
Я обнаружил, что если я установил тип возвращаемого значения в «None», так что код сгенерированного конструктора заканчивается вызовом base.ExecuteFunction(...)
, что я могу получить доступ к выходным параметрам после вызова функции (но, конечно, не для набора результатов).
С другой стороны, если я установить тип возвращаемого значения в конструкторе в коллекцию сложных типов, то дизайнер сгенерированный код вызывает base.ExecuteFunction<T>(...)
и результирующий набор возвращается как ObjectResult<T>
но тогда value
свойство для ObjectParameter
случаев является NULL
, а не содержащий что я могу видеть, когда он возвращается в Profiler.
Я предполагаю, что второй метод, возможно, вызывает DataReader и не закрывает его. Это известная проблема? Любая работа вокруг или альтернативные подходы?
Редактировать
Мой код в настоящее время выглядит
public IEnumerable<FooBar> GetFooBars(
int? param1,
string param2,
DateTime from,
DateTime to,
out DateTime? createdDate,
out DateTime? deletedDate)
{
var createdDateParam = new ObjectParameter("CreatedDate", typeof(DateTime));
var deletedDateParam = new ObjectParameter("DeletedDate", typeof(DateTime));
var fooBars = MyContext.GetFooBars(param1, param2, from, to, createdDateParam, deletedDateParam);
createdDate = (DateTime?)(createdDateParam.Value == DBNull.Value ?
null :
createdDateParam.Value);
deletedDate = (DateTime?)(deletedDateParam.Value == DBNull.Value ?
null :
deletedDateParam.Value);
return fooBars;
}
Если вы используете инфраструктуру сущности, у вас действительно должна быть чистая модель домена. Какие вещи вы пытаетесь загрузить в свою модель, где требуется эта странная процедура двойного вывода? Это было сделано для того, чтобы справиться с каким-то ограничением производительности? – JDPeckham
@JDPeckham - Не особенно странно ИМО. Выходные параметры содержат некоторые данные заголовка о результате, а результирующий набор содержит строки данных. Набор результатов хранимой процедуры содержит довольно сложную логику, которую я не хочу запускать дважды, и Entity Framework не может эффективно работать. Так возможно или нет? (Тем временем я просто использую ADO.NET и DataReader, но поскольку он может сделать то или другое, я хотел бы знать, можно ли сделать оба) –