Один момент заключается в том, что вы не всегда хотите или можете предоставлять доступ к данным (сопоставления).В частности, обычно есть только один компонент, который использует уровень доступа к данным, и многие другие части, которые используют только API классов данных и никогда не знают о доступе к данным.В моем текущем проекте клиентское приложение работает в среде, которая не может обрабатывать ссылки на NHibernate, что делает невозможным доступ к данным.Но клиент использует классы данных.В другом проекте мои (автоматически сгенерированные) классы данных использовались на нескольких языках программирования и платформах.Гораздо последовательнее было всегда иметь их в отдельном модуле / сборке / проекте / что угодно, иметь согласованный API независимо от используемой платформы.Только сервер использовал доступ к данным.
Во-вторых, всегда лучше отделить как можно больше независимых друг от друга вещей, по многим причинам мне лень об этом упоминать.
Кроме того,Исходя из моего опыта, нередко меняются местами слои доступа к данным.
Кстати, почему вам так неприятно отделять сущности от классов данных?Да, с сегодняшними все еще несовершенными инструментами программирования вы снова и снова будете повторять те же самые практики (надеюсь, не повторяя код), но по уважительной причине.