Thanks Fabio, I will take a look at what a tuplizer is :), but I don't see why NH needs to access the properties of a newly created object just to overwrite them with the transient instance properties' values.
I'm browsing the NH source to trying to find out but it is complex beast... It seems that this drags from the fact that both EntityIsTransient and EntityIsDetached are using the same method (CopyValues) to update the properties of the resulting persistent entity. Do you see room for improvement here or I should just move on? Thanks again. On Mon, Mar 9, 2009 at 4:27 PM, Fabio Maulo <[email protected]> wrote: > Ah.. sorry.. in Merge sure it access to the getter... sorryIf you need a > certain ctor you should implement your own tuplizer (I don't know where you > will find the State instance but it is another matter). > > > 2009/3/9 Germán Schuager <[email protected]> > >> I've tried it. It does access the getters when merging an entity in the >> method CopyValues of DefaultMergeEventListener.cs >> >> >> https://nhibernate.svn.sourceforge.net/svnroot/nhibernate/trunk/nhibernate/src/NHibernate/Event/Default/DefaultMergeEventListener.cs >> >> >> On Mon, Mar 9, 2009 at 3:14 PM, Fabio Maulo <[email protected]> wrote: >> >>> NH don't access to the getter during object creation. Try it. >>> >>> >>> 2009/3/9 Germán Schuager <[email protected]> >>> >>>> Hi Fabio, >>>> >>>> Num is a persistent property, and I have several entities that implement >>>> INum; in this case Cat is delegating its actual implementation to its >>>> private field "state". >>>> >>>> I don't think that a nosetter access for Num would solve the problem >>>> because the exception would be generated anyway (when accessing the getter >>>> of Num for the newly instantiated Cat, the persistent one, which has state >>>> == null yet). >>>> >>>> And with the readonly accesor it would also be the same. >>>> >>>> The problem here is that NH is trying to read Num from an entity that is >>>> in an invalid state in order to compare this value with the transient one >>>> that I'm trying to merge, to determine if it should be copied or not. (At >>>> least I think this is the problem) >>>> >>>> Does this make sense? >>>> >>>> >>>> On Mon, Mar 9, 2009 at 1:51 PM, Fabio Maulo <[email protected]>wrote: >>>> >>>>> If Num is a persistent property you should use- a field only to make >>>>> NH happy (you don't need to use it) >>>>> - Num access="nosetter.camelcase"... if I well remember we have another >>>>> accessor in NH2.1 access="read-only" >>>>> >>>>> 2009/3/9 Germán Schuager <[email protected]> >>>>> >>>>> Hi, >>>>>> >>>>>> I want to do a merge of a transient object which some of its >>>>>> properties are assigned with detached objects, in order to get a >>>>>> persistent >>>>>> object with all its properties assigned with persistent instances (using >>>>>> cascade="merge"). Is this the correct usage scenario for merge? >>>>>> >>>>>> Here is a sample entity: >>>>>> >>>>>> public interface INum >>>>>> { >>>>>> int Num { get; } >>>>>> } >>>>>> >>>>>> public class Cat : Entity, INum >>>>>> { >>>>>> private State state; >>>>>> >>>>>> protected Cat() { } >>>>>> >>>>>> public Cat(State state) >>>>>> { >>>>>> this.state = state; >>>>>> } >>>>>> >>>>>> public State State { get { return state; } } <--- mapped using >>>>>> access="field.camelcase" >>>>>> >>>>>> public int Num { >>>>>> get { return state.Num; } >>>>>> set { state.Num = value; } >>>>>> } >>>>>> >>>>>> } >>>>>> >>>>>> The problem that I'm facing is that Merge is trying to read the Num >>>>>> property from a Cat created using the protected constructor (the >>>>>> persistent >>>>>> instance?) before assigning its "state" field, thus throwing a >>>>>> NullReferenceException in the getter. >>>>>> >>>>>> A simple solution would be to add a check to verify that state != null >>>>>> in the getter, but that would be only to support NH functionality and it >>>>>> would have nothing to do with my domain. >>>>>> >>>>>> Do I need to add the check for state != null? >>>>>> Can NH be improve to handle this situation? >>>>>> >>>>>> Regards. >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Fabio Maulo >>>>> >>>>> >>>>> >>>> >>>> >>>> >>> >>> >>> -- >>> Fabio Maulo >>> >>> >>> >> >> >> > > > -- > Fabio Maulo > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
