Не могли бы вы посоветовать мне, как они реализовали использование функций Imports при использовании шаблона Repository против EF 4.0?Функция Импорт и шаблон хранилища с Entity Framework 4.0
У нас есть таблица, сопоставленная с объектом-кандидатом, а также функция Импорт из существующего sproc, который сопоставляется с кандидатом. Это отлично работает в EF, но мы абстрагируемся с помощью репозиториев, которые берут на себя конструктор IObjectSet, где T является объектом POCO. Однако это означает, что я не могу получить ссылку на импорт функции. Единственный способ, которым я могу это сделать, - передать ссылку на ObjectContext в репозитории, которые в ней нуждаются, но для меня это немного напоминает дизайнерский запах.
Несмотря на то, что некоторые из наших репозиториев расширены с помощью пользовательских интерфейсов, мы по-прежнему сталкиваемся с той же проблемой.
public class CandidateRepository : Repository<Candidate>, ICandidateRepository
{
public CandidateRepository(IObjectSet<Candidate> entities)
: base(entities)
{
}
public Candidate GetByEmail(string email)
{
return Entities.SingleOrDefault(c => c.EmailAddress.Equals(email));
}
public bool CandidateExists(string candidateNumber)
{
return Entities.SingleOrDefault(c => c.Number.Equals(candidateNumber)) != null;
}
public Candidate GetByNumber(string number)
{
return Entities.SingleOrDefault(c => c.Number.Equals(number));
}
public Candidate GetMember(string number)
{
return new Candidate(); //This one needs to return from the Function Import
}
}
Любые советы приветствуются.
Спасибо за ответ Юрий. Будете ли вы достаточно любезны рассказать о своем определении «совокупных корней», пожалуйста? Мы не так далеко в разработке, что мы не смогли реорганизовать лучшую расширяемость. –
Ну, «совокупный корень» - это концепция управления доменным дизайном (DDD). Рассмотрим простую модель Order 1. .. * OrderLine. Обычно вы не создавали OrderLine без ордера, поэтому вам понадобится только OrderRepository. Таким образом, Заказ представляет собой совокупный корень, содержащий ссылки на OrderLines. Определение агрегирующих корней - это практический вопрос DDD, который зависит от объектов, которые вы пытаетесь «моделировать» в своем приложении. –