Как всегда, это зависит от вашего конкретного случая, но в качестве хорошей эвристики я бы посоветовал вам создать / отправить / отказаться от вашего DataContext (или вашей ISession, если вы используете NHibernate, или ваш ObjectContext, если вы используете EDM ) в тонком фасаде, который лежит между вашей презентацией и вашей бизнес-логикой. Это иногда называют прикладным уровнем сервисного уровня.
Это было где, сейчас - как. Другой хороший эвристик говорит, что вы должны использовать AOP для выполнения задачи. И под АОП я не имею в виду огромную толстую специализированную платформу АОП. Почти все инфраструктуры представления и веб-служб предоставляют некоторые возможности AOP, которые позволяют выполнять некоторую работу до и после выполнения бизнес-кода, например, IHttpModule в ASP.NET и IDispatchMessageInspector в WCF. Подключитесь к вашей среде и создали DataContext.
Если вам когда-либо понадобится изменить свой DAL, вам придется изменить только DAL и код, который вы использовали для создания / отправки изменений DAL. Фактически, код, вводимый AOP, также должен быть помещен в сборку DAL и, если возможно, настроен в процедуре начальной загрузки.