2012-06-18 4 views
2

У меня есть приложение проблема проектирования многоуровневой с Entity Framework 4.Как использовать Entity Framework (4) скомпилированные запросы в n-уровневом многоуровневом приложении?

стороны сервера, мое приложение имеет 3 слоя: - один сервисный слой (WCF) - один бизнес слой - один DataAccess слой (рабочие с EF4)

Объекты POCO, место в независимом проекте/сборке.

Я использую Dependency Injection для создания объектов бизнеса и слоев DataAccess, поэтому я работаю только с интерфейсами, и у меня нет зависимости от EF на моем бизнес-уровне.

Я хотел бы использовать EF Compiled Queries для улучшения характеристик.

Но мои (бизнес) запросы определены в бизнес-слое, так как в моей архитектуре DataAccess предоставляет только методы CRUD.

Таким образом, скомпилированные запросы должны быть определены в бизнес-слое, но у меня нет зависимости от EF и вы не хотите, чтобы у вас было свободное соединение, поэтому я не могу вызвать ObjectContext.

И определение запросов в DataAccess не соответствует моему дизайну приложения.

Так кто-нибудь знает, есть ли общий способ для ввода бизнес-запросов из бизнес-уровня на уровень DataAccess, чтобы я мог использовать их с помощью скомпилированных запросов?

Я пробовал много вещей, и посмотрел везде, и не мог найти ответ на этот вопрос ... :(выглядит EF не очень хорошо согласуется с такого рода применения многоуровневых.

ответ

0

Составитель запрос принадлежит уровню доступа к данным, поскольку он зависит от типа доступа к данным, зависящего от классов доступа к данным. Если ваш проект не принимает этого, он просто не готов к конкретным функциям доступа к данным = либо измените свой дизайн, либо не используйте конкретный доступ к данным Особенности:

Простейший способ состоит в том, чтобы добавить связанные запросы к вашему контексту и разоблачить их как методы в контексте:

public IQueryable<SomeEntity> SomeQuery(string someParam) { 
    return compiledQuery.Invoke(this, someParam); 
} 

Теперь вы добавите эти методы в интерфейс для контекста.

Вы можете следовать аналогичному подходу и выставлять скомпилированный запрос на любой интерфейс доступа к данным, видимый в бизнес-слое.

+0

thanx, вот что я не хотел читать, но знал, что буду ... :) – PAP

 Смежные вопросы

  • Нет связанных вопросов^_^