Можно ли использовать предварительно скомпилированные запросы linq с репозиториями. В настоящее время мои хранилища настроены как
public class CustomerRepository : EntityRepository
{
private readonly IContext _context;
public CustomerRepository(UnitOfWork uow)
{
_context = uow.context;
}
}
Я мог бы создать предварительно скомпилированный запрос следующим образом, используя мой фактический класс контекста MyEntities: ObjectContext, IContext.
static Func<ObjectContext, int, Customer> _custByID;
public static Customer GetCustomer( int ID)
{
if (_custByID == null)
{
_custByID = CompiledQuery.Compile<MyEntities, int, Customer>
((ctx, id) => ctx.Customers.Where(c => c.CustomerID == id).Single());
}
return _custByID.Invoke(_context, ID);
}
Проблема в том, что методы компиляции TArg0 принимают тип, производный от ObjectContext. Поскольку вся моя цель использования репозиториев с IContext состояла в том, чтобы скрыть связанный с объектной структурой код, используя вышеприведенное, не имеет смысла. Как мне использовать предварительно скомпилированные запросы linq. Должен ли я переместить их в отдельную библиотеку классов, которая ссылается на мою модель и структуру сущностей, или мое представление о репозиториях неверно? Я использую EF4 в приложении ASP.net.