Я чистил сеть, но не нашел ничего полезного. У меня есть класс POCO, который я хочу подключить к хранимой процедуре в Entity Framework 6.x. Я вижу, как это сделать в Fluent API для вложений, обновлений и удалений… но не для простого чтения.
Я нашел это: EF 6 Code First Stored Procedure – только для чтения, но он похож на какой-то метод на каком-то контроллере.
Есть ли способ, которым я могу назвать контекст, как если бы я был любым другим Entity. IE, ctx.Products.Where(p => p.ProductId == productId)?
Я бы подошел, это один из двух способов.
Отображение домена /POCO
Если основной проблемой является несоответствие между вашей моделью Entity Framework POCO и вашим (предположительно чисто логическим) доменом, я бы сопоставлял модель EF напрямую с схемой базы данных, и соответственно сопоставлял их по типам доменов. Т.е. у вас есть отдельная модель домена для ваших EF poco. Работа с картографией, ранее выполненная вашим proc, будет затем выполняться внутри модуля отображения домена.
Абстрактное использование DbContext за репозиториями
Вместо того, чтобы пользователи напрямую запрашивали контекст, вы могли бы абстрагировать контекст репозиториев сущностей и сопоставить между SqlQuery, вызывающим proc и ваш POCO в методах репозитория
Например, вот примерный код:
public class MyEntityRepository()
{
public ICollection<MyEntity> GetAll()
{
return _myContext.SqlQuery<MyEntity>("exec myProc", params);
}
}
Однако ни один из этих вариантов не будет быстро реализован и не будет введен в вашу кодовую базу.