+1  A: 

The best solution is NOT to expose your persistent classes in the service.

Instead, create DTO classes that contain only the information needed by each service call, and expose those.

You can use AutoMapper to avoid part of the work of mapping from/to the DTOs and the persistent classes.

Diego Mijelshon
Do you have any advice around changing the persistent class? IE, if i change the PersonName property to CustomerName.. it will break items inside the DTO. How should this be managed?
ChrisKolenko
I'm still a little weight when it comes to NHibernate, but can you use some sort of ResultsTransformer to create the DTO? It seems silly to create IList<PersonDTO> by looping through a list of IList<Person>.. an example of using AutoMapper and NHibernate would be great to :D
ChrisKolenko
I didn't understand the first question. For the second one, you could use the AliasToBeanResultTransformer and do the projections in HQL, but it's a little fragile. Another way is using Linq to Objects to project the exact DTO that you want from the original entities, either with AutoMapper or manually (sorry, I don't have samples, but it shouldn't be hard; check the included ones)
Diego Mijelshon