Я обычно создаю Уровень данных с LiNQ.
Он состоит из репозиториев, которые реализуют составные интерфейсы, поэтому у меня есть полная гибкость в том, как их использовать.
IPersonRepository : IReadRepository<Person>, ICreateRepository<Person>, IUpdateRepository<Person> //and so on..
Они в основном ориентированы на доменные объекты, поэтому они излучают доменные объекты и сами позаботятся о всей логике отображения.
Они могут также создать некоторые списки словарей, например, словарь, состоящий из идентификатора и имени человека, поэтому мне не нужно слишком сильно тянуть из базы данных, чтобы отобразить раскрывающийся список.
Хотя иногда для небольших проектов я просто использую базовое сопоставление атрибутов без .dbml.
Мне кажется, что этот подход дает очень чистую модель приложения, потому что вся грязная логика, ориентированная на данные, скрыта в уровне данных. Business- / ServiceTier - это чистый бизнес:)