Even if you serialize your entity for your save operation and use
something like session.Merge, NHib will still need to retreive
existing database values (I believe).  So there will still be a reload
operation.  And if efficiency is particularly important to your app,
then I'm not sure that WCF is the best choice!  :-)

You're correct that I don't have any DTOs involved at the NHib or WCF
level.

On Apr 8, 4:19 pm, graphicsxp <[email protected]> wrote:
> That's interesting John... So you are loading the entities when you
> send them to the client AND when you want to save them. Is it still
> efficient ? And I take it as you don't use DTO's then ?
>
> On 8 avr, 15:13, John Rayner <[email protected]> wrote:
>
>
>
> > So that's the default WCF behaviour - to deserialize a collection of
> > objects into an array.  You can control this by either tweaking the
> > WCF proxy generation (using command line parameters to whatever it is
> > that generates the proxies) or you can supply your own class for
> > deserialization.
>
> > And I'll agree with Greg here that updates using the Command pattern
> > are probably easier and probably more reliable.  I've described this
> > elsewhere before in this list, but my project uses serialization of
> > entities just to get data to the client.  When we want to manipulate
> > data, then we have some command objects that we post to the WCF
> > service.  The updating service will then load entities from the NHib
> > session, update them and then pass resulting state changes (e.g. an
> > Identity value has been assigned) back over the wire to the client.
>
> > Cheers,
> > John
>
> > On Apr 7, 3:07 pm, graphicsxp <[email protected]> wrote:
>
> > > John > I know it looks weird but that's what I get. I think this post
> > > illustrates exactly my issue 
> > > :http://lunaverse.wordpress.com/2007/05/09/remoting-using-wcf-and-nhib...
> > > Unfortunately I haven't been successful in implementing it :(
>
> > > Greg>   send them to the domain as commands.
> > > Do you mean SQLCommands ? As in not using NH to persist my entity  ?
>
> > > On 7 avr, 14:59, Greg Young <[email protected]> wrote:
>
> > > > Don't .. have the UI track the changes that the user wants to make and
> > > > send them to the domain as 
> > > > commands.http://martinfowler.com/eaaDev/EventSourcing.htmlisagoodstart.
>
> > > > but even if you wanted a DTO up/down CRUD model just send back the DTO
> > > > and map it back to your domain object.
>
> > > > On Tue, Apr 7, 2009 at 4:43 AM, graphicsxp <[email protected]> 
> > > > wrote:
>
> > > > > Yes that's for the benefits of using DTO's, but I'm more concerned
> > > > > with the drawbacks :p
>
> > > > > How do I map my entities to my dto's, and when I send the dto back
> > > > > from the client to the server, how to I recreate an entity with the
> > > > > full data so that nhibernate can detect only the changes made by the
> > > > > client ?
>
> > > > > On 7 avr, 05:59, Davy Brion <[email protected]> wrote:
> > > > >> +1
>
> > > > >> if you keep your entities within your service boundaries you avoid 
> > > > >> the whole
> > > > >> lazy-load/proxying issue, and you also have the ability to evolve 
> > > > >> your
> > > > >> domain model without breaking clients.
>
> > > > >> On Mon, Apr 6, 2009 at 7:07 PM, Greg Young <[email protected]> 
> > > > >> wrote:
>
> > > > >> > Not exposing entities on the wire is a best practice with any tool.
>
> > > > >> > Even if you control both ends it is still in general a bad idea in 
> > > > >> > all
> > > > >> > but the most simplistic of examples.
>
> > > > >> > Greg
>
> > > > >> > On Mon, Apr 6, 2009 at 1:04 PM, Dotan N. <[email protected]> wrote:
> > > > >> > > those best practices apply to entity framework or did MS build 
> > > > >> > > in some
> > > > >> > sort
> > > > >> > > of transparent integration between EF and wcf?
>
> > > > >> > > On Mon, Apr 6, 2009 at 6:37 PM, John Rayner 
> > > > >> > > <[email protected]>
> > > > >> > > wrote:
>
> > > > >> > >> Please let everyone know how that works out for you.  Using 
> > > > >> > >> NHib to
> > > > >> > >> drive WCF services is of interest to many people and there are 
> > > > >> > >> very
> > > > >> > >> few clear best practices at the moment.
>
> > > > >> > >> On Apr 6, 2:11 pm, graphicsxp <[email protected]> wrote:
> > > > >> > >> > Hi John
>
> > > > >> > >> > I tend to agree with you, although I can see the benefits of 
> > > > >> > >> > using
> > > > >> > >> > DTO's as well.  If go back to your first reply, you suggested 
> > > > >> > >> > turning
> > > > >> > >> > off lazy-loading in the mapping.
> > > > >> > >> > I don't think it's a good idea because some of my clients 
> > > > >> > >> > won't use
> > > > >> > >> > WCF and could benefit from lazy-loading.  Therefore, how 
> > > > >> > >> > about I turn
> > > > >> > >> > on/off lazy loading at DAO level ? I could have some methods 
> > > > >> > >> > which
> > > > >> > >> > would request an entity using _session.get<myentity>(id) and 
> > > > >> > >> > others
> > > > >> > >> > (for WCF) that would make use of ICriteria  to join on the 
> > > > >> > >> > dependent
> > > > >> > >> > tables in order to load everything at once... It seems to be 
> > > > >> > >> > my
> > > > >> > >> > favourite idea (at least until the next hour ;p )
>
> > > > >> > >> > On 6 avr, 13:01, John Rayner <[email protected]> 
> > > > >> > >> > wrote:
>
> > > > >> > >> > > This is good advice ... if you have WCF clients which are
> > > > >> > externally-
> > > > >> > >> > > controlled systems.  If you control both the service and its
> > > > >> > consumer,
> > > > >> > >> > > and you expect them to evolve in sync with each other, then 
> > > > >> > >> > > I think
> > > > >> > >> > > the choice is less clear.
>
> > > > >> > >> > > On Apr 2, 4:06 pm, James Hicks <[email protected]> wrote:
>
> > > > >> > >> > > > Don't expose internal types to external systems.  Use 
> > > > >> > >> > > > coarse
> > > > >> > grained
> > > > >> > >> > > > messages and DTOs to model the external view of your 
> > > > >> > >> > > > system.  The
> > > > >> > >> > > > small
> > > > >> > >> > > > price you pay in maintaining this extra layer buys you 
> > > > >> > >> > > > the ability
> > > > >> > >> > > > to change
> > > > >> > >> > > > your internal system without affecting the clients of the 
> > > > >> > >> > > > service.
>
> > > > >> > >> > > > If you are insistent on exposing your entities via WCF, 
> > > > >> > >> > > > turn off
> > > > >> > >> > > > lazy
> > > > >> > >> > > > loading.  You may be able to generate your own proxies 
> > > > >> > >> > > > that are
> > > > >> > >> > > > smart enough
> > > > >> > >> > > > to go back to the WCF service to pull down any lazy loaded
> > > > >> > >> > > > collections.
>
> > > > >> > >> > > > James
>
> > > > >> > >> > > > On Tue, Mar 31, 2009 at 12:08 PM, graphicsxp
> > > > >> > >> > > > <[email protected]>wrote:
>
> > > > >> > >> > > > > Hi,
>
> > > > >> > >> > > > > I'm struggling to get WCF Service working with 
> > > > >> > >> > > > > NHibernate.
>
> > > > >> > >> > > > > I have a  Post entity which holds a collection of 
> > > > >> > >> > > > > Publication
> > > > >> > >> > > > > entities
> > > > >> > >> > > > > (lazy loaded). When the collection is loaded and the 
> > > > >> > >> > > > > Post entity
> > > > >> > >> > > > > returned to the client via WCF, there is an exception :
>
> > > > >> > >> > > > > Type 'PublicationProxyc00e5dcd4dce4ee889643285aadb5575' 
> > > > >> > >> > > > > cannot
> > > > >> > >> > > > > have
> > > > >> > >> > > > > DataContractAttribute attribute Namespace set to null.
>
> > > > >> > >> > > > > The type PublicationProxy was created by NHibernate but 
> > > > >> > >> > > > > the
> > > > >> > >> > > > > Publication class looks like :
>
> > > > >> > >> > > > > [DataContract(Name = "Publication")]
> > > > >> > >> > > > >  public class Publication : IPublication
> > > > >> > >> > > > >  {
> > > > >> > >> > > > >  .
> > > > >> > >> > > > >  .
> > > > >> > >> > > > >  .
> > > > >> > >> > > > >  }
>
> > > > >> > >> > > > > What can I do to workaround this issue ?- Hide quoted 
> > > > >> > >> > > > > text -
>
> > > > >> > >> > > > - Show quoted text -- Hide quoted text -
>
> > > > >> > >> > - Show quoted text -
>
> > > > >> > --
> > > > >> > It is the mark of an educated mind to be able to entertain a 
> > > > >> > thought
> > > > >> > without accepting it.
>
> > > > --
> > > > It is the mark of an educated mind to be able to entertain a thought
> > > > without accepting it.- Hide quoted text -
>
> > > - Show quoted text -- Hide quoted text -
>
> - Show quoted text -
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to