У меня проблемы с получением правильного дизайна. Я использую шаблон репозитория для управления уровнем данных. В одном из моих контроллеров (MVC3) я создаю запрос LINQ, который должен выполнить соединение. У меня есть 2 вопроса по этому поводу:
- Лучше ли добавить метод в мой репозиторий для выполнения всех объединений, проекций и т. Д.? Я немного сомневаюсь по этому поводу, потому что это приведет к постоянно растущему определению контракта в моем хранилище?
- Допустим, у меня есть метод List () в репозитории Post, который возвращает все элементы. В настоящее время я не могу использовать этот метод в запросе linq (join), потому что он не может преобразовать его в выражение хранилища. Обратите внимание, что в приведенном ниже коде используется класс repo, который содержит ссылку на все мои репозитории (сообщения, друзья), использующие один и тот же экземпляр контекста.
БОЛЬШОЕ РЕДАКТИРОВАНИЕ:
Сейчас все немного яснее, но я надеюсь, что кто-нибудь сюда заскочит и поможет мне все организовать ;-). То, что я хочу сделать, это реализовать шаблон спецификации вместе с моим шаблоном хранилища. Проблема в том, что я использую POCO, а мои репозитории используют интерфейс IContext, который использует IObjectSets. Таким образом, в приведенном ниже методе list Posts - это IObjectSet, а Context - это интерфейс IContext, в который я вставляю свой фактический контекст.
Я читал, и есть очень хороший готовый код, например
внедряющий-репозиторий-шаблон-с-ef4-poco-support и внедряющий-репозиторий-шаблон-с-сущностью-фреймворк .
В обоих этих примерах используется objectContext в хранилище. Не лучше ли абстрагироваться от этого?
Мой репозиторий:
public System.Linq.IQueryable<Post> List()
{
return this.context.Posts;
}
И в моем методе контроллера:
var friendquestions = (from q in base._repo.Post.List().OfType<Question>()
from f in _repo.Friends.List()
where f.userId == myid
where q.Author == f.friendId
select q.Id).ToArray();
Однако (почему?) Работает следующее:
var temp = (from q in base._repo.Post.List().OfType<Question>()
where q.Id > 6
select q.Id).ToArray();
Это в основном та же проблема, что и здесь: linq-to-entity-not-распознать метод
Как мне с этим справиться? Я читал о функциях, определенных моделями, но я не уверен, что это путь?
заранее спасибо