I'm actually going through the exact same process that you are, trying to load information via NHibernate to a service.
Since you are instructing WCF to send your domain objects over the wire, you CANNOT send over proxies generated by NHibernate via the
lazy="true" attribute. These proxies support the lazy loading ability by not actually hitting the database until you touch one of the properties. At that point, the object calls NHibernate to hydrate itself with the actual values and is loaded. (Remembering that the proxy object is the subclassed instance!)
Now comes the tricky part. Depending on your Service Operation [OperationContract], You must either set those properties to NULL if you don't need info in them, OR you must touch the property to load the entity values, and REPLACE that property with a freshly built copy of the values. In other words, you'd hit "object.LegalAgencyEntity.Id" to have the proxy load up the instance values, and then set object.LegalAgencyEntity = new Domain.LegalAgencyEntity() with all the values copied from the proxy into the actual instance.
Personally, I'm finding that its not a great idea to try to send out your DOMAIN objects over the wire, but to actually send out DATA CONTRACT over the wire. There's a fairly large difference here. Which implies that you're actually going to have to think about your data contracts, and make them distinct from your domain objects.
Your DATA CONTRACT is what that service can return. Since you're using lazy loading, data contracts in services cannot support that.
I'm planning on writing a blog post about this issue on
http://geekswithblogs.net/ensoftBlog/[/b]