У меня недавно была такая же проблема. Другой шаблон, но все же LINQ to SQL (L2S). Я попробовал два разных способа избежать утечки.
Сначала мы попробовали использовать DTO и слой отображения. Итак, мы написали супер простые объекты, которые имели однозначное сопоставление с таблицами. Все они были украшены атрибутами L2S. Затем мы написали слой отображения, чтобы сопоставить DTO с нашими бизнес-объектами. Все это было скрыто через шаблон Repository от Doman Driven Design. Таким образом, потребители бизнес-объектов даже не подозревали, что L2S находится под капотом.
Дальше, в основном для разнообразия. Мы попытались использовать функции отображения XML в L2S, поэтому сами объекты не нуждались в атрибутах. Для коллекций мы выставили IEnumerable вместо любой из коллекций L2S. Если вы посмотрите на внутренности бизнес-классов, вы все равно сможете обнаружить некоторое использование L2S (EntitySet или Ref). Но потребители этого класса понятия не имели. Таким образом, некоторые биты утечки, но ничего радикального.
В итоге мы застряли с первым шаблоном. Второе сработало, и мы могли бы заменить L2S без изменения интерфейса бизнес-уровня, но я никогда не был доволен отображением XML. Первый шаблон имел намного более четкое разделение между базой данных и бизнес-объектами. Потребовалось больше кода. Первый также работал лучше для нас, потому что он позволял нам развивать бизнес-объекты не так, как таблицы. В первые дни проекта отображение xml работало, потому что наши объекты были в значительной степени один к одному с таблицами.
Итак, в конце мы помещаем слой между L2S и доменом. Это сработало. Потребовалось больше кода, но это было действительно просто. И все это было очень проверяемым.