Я считаю, что единственно правильный путь - это создать слой DTO между вашим бизнес-уровнем и доступом к данным. Я сделал это во многих проектах, и у меня был большой успех с этим.
Помните, что ваши бизнес-объекты не должны выглядеть как ваш слой данных. Объекты CSLA являются вашим бизнес-уровнем и должны быть гидратированы из вашего уровня доступа к данным ORM в ваших методах DataPortal_XYZ.
Возьмем, к примеру, простой пример структуры таблицы данных Users, Roles и UserRoles, где UserRoles - это таблица ссылок для связи пользователей с ролями. Это ваша схема данных, и она очень хорошо нормализует ваши данные.
Ваши бизнес-объекты НЕ должны выглядеть так, поскольку это не нормализует поведение. Когда вы думаете о бизнес-объекте User, у него должно быть свойство RoleList, представляющее собой список объектов Role. Не должно быть бизнес-объекта UserRole в существовании. Это может произойти, если вы пытаетесь перейти непосредственно из схемы базы данных и объектов CSLA.