I believe the right rule is to create a DTO level between your business layer and data access. I have done this in many projects, and I have had great success.
Please keep in mind that your business objects should not look / feel like your data layer. CSLA objects are your business layer and should be humidified from the data access ORM level in your DataPortal_XYZ methods.
Take, for example, a simple example of the structure of the Users, Roles, and UserRoles data tables, where UserRoles is a link table to associate users with roles. This is your data scheme, and it is very good at normalizing your data.
Your business objects should NOT look like this does not normalize bahavior. When you think of a userβs business object, it should have a RoleList property, which is a list of Role objects. There really shouldn't be a UserRole business object. This will happen if you try to jump directly from the database schema and CSLA objects.
source share