ask me if I'm using NH's session in domain classes sound heretic!!
LOL

2010/2/24 Ricardo Peres <[email protected]>

> Never met him, just curiosity!
> Thanks!
>
> RP
>
> On Feb 24, 1:19 pm, Fabio Maulo <[email protected]> wrote:
> > What ?
> > GetLastestVersion does not need to know about session, it only need to
> find
> > the lastestXYZ inside the collection AllVersion.
> >
> > Are you working with Chris B ?
> >
> > 2010/2/24 Ricardo Peres <[email protected]>
> >
> >
> >
> >
> >
> > > Hi, Fabio!
> >
> > > Does this mean that you are advocating entities to have knowledge of
> > > ISession, in the GetLastestVersion method? If not, how would we
> > > implement this?
> > > I am not complaining, just wanted to know your opinion! :-)
> >
> > > Thanks,
> >
> > > RP
> >
> > > On Feb 24, 3:08 am, Fabio Maulo <[email protected]> wrote:
> > > > private Version latestVersion;
> > > > public virtual Version LatestVersion {
> > > > get{
> > > > if(lastestVersion == null)
> > > > {
> > > > lastestVersion = GetLatestVersion(this.AllVersions);}
> >
> > > > return latestVersion;
> >
> > > > } }
> >
> > > > When you change something in AllVersions you should call :
> > > > void InvalidateVersions()
> > > > {
> > > > lastestVersion= null;
> >
> > > > }
> >
> > > > to map it:
> >
> > > > <many-to-one name="LatestVersion" access="nosetter.camelcase"/>
> >
> > > > 2010/2/23 Chris B <[email protected]>
> >
> > > > > Fabio,
> >
> > > > > I think you are saying I could implement it like this:
> >
> > > > > public class Header
> > > > > {
> > > > >    public virtual int HeaderId { get; set; }
> > > > >     public virtual Version LatestVersion { get{ return
> > > > > GetLatestVersion(this.AllVersions); } }
> > > > >    public virtual Version LatestApprovedVersion {  get{ return
> > > > > GetLatestApprovedVersion(this.AllVersions); } }
> > > > >     public virtual List<Version> AllVersions { get; set; }
> > > > >    // other members
> > > > > }
> >
> > > > > I had considered this kind of implementation, but the number of
> > > > > version entities can be large and all but two (the latest and
> latest
> > > > > approved) are very rarely used.  I am hoping the AllVersions
> > > > > collection can be loaded only when viewing version history (rare),
> and
> > > > > not during normal workflow operations (common).  I am assuming that
> > > > > accessing the AllVersions collection will load all versions, even
> if
> > > > > only one Version is being inquired about.  So for example,
> >
> > > > > Header h = ReadHeader();
> > > > > Version v = h.AllVersions[4]; // lazy loads all versions into the
> > > > > AllVersions collection, not just the one at index 4
> >
> > > > > I am also not sure where the reference to Invoice.TotalAmmount came
> > > > > from.  My entities do not have such a field.
> >
> > > > > On Feb 23, 4:00 pm, Fabio Maulo <[email protected]> wrote:
> > > > > > ok... then is easy
> > > > > > You can map the two properties as access="readonly" and in its
> getter
> > > you
> > > > > > can read your collection to get LastXYZ.
> > > > > > The two properties will be saved as denormalized properties and
> you
> > > can
> > > > > use
> > > > > > it in any queries.
> >
> > > > > > If you want you can map it as access="nosetter.camelcase" and
> > > implements
> > > > > the
> > > > > > getter in order to read from collection when the private field is
> > > null
> > > > > > (Note: when you change the collection adding, removing or
> changing a
> > > > > member
> > > > > > you should "reset" the LastXYZ).
> >
> > > > > > In both case what will result "denormalized" is the DB but in
> your
> > > model
> > > > > > everything will be auto-protected...
> > > > > > in practice the same you are doing with Invoice.TotalAmmount
> >
> > > > > > 2010/2/23 Chris B <[email protected]>
> >
> > > > > > > There is also a list of all previous versions in the
> > > > > > > Header.AllVersions property. I had forgotten that I omitted it
> in
> > > my
> > > > > > > original post.  The only use case where this is loaded is when
> a
> > > user
> > > > > > > requests to view the version history.
> >
> > > > > > > The LatestVersion and LatestApprovedVersion references are
> mainly
> > > for
> > > > > > > efficiency.  Most use cases involve either displaying/mutating
> the
> > > > > > > data of the LatestVersion or reading the data of the
> > > > > > > LatestApprovedVersion.  It would be great if we could
> selectively
> > > load
> > > > > > > those two versions (on demand) without having to load all
> versions.
> >
> > > > > > > Here is an updated entity definition:
> >
> > > > > > > public class Header
> > > > > > > {
> > > > > > >    public virtual int HeaderId { get; set; }
> > > > > > >    public virtual Version LatestVersion { get; set; }
> > > > > > >    public virtual VersionLatestApprovedVersion { get; set; }
> > > > > > >     public virtual List<Version> AllVersions { get; set; }
> > > > > > >     // other members
> > > > > > > }
> >
> > > > > > > public class Version
> > > > > > > {
> > > > > > >     public virtual int VersionId { get; set; }
> > > > > > >     public virtual Header Header { get; set; }
> > > > > > >     // other members
> > > > > > > }
> >
> > > > > > > Does that help to clarify?
> >
> > > > > > > On Feb 23, 11:15 am, Fabio Maulo <[email protected]> wrote:
> > > > > > > > you are showing only LatestVersion and LatestApprovedVersion
> > > > > > > > where are previous ?
> >
> > > > > > > > 2010/2/19 Chris B <[email protected]>
> >
> > > > > > > > > Hello,
> >
> > > > > > > > > I am trying to create a mapping file for entities which
> look
> > > like
> > > > > the
> > > > > > > > > following:
> >
> > > > > > > > > public class Header
> > > > > > > > > {
> > > > > > > > >    public virtual int HeaderId { get; set; }
> > > > > > > > >    public virtual Version LatestVersion { get; set; }
> > > > > > > > >    public virtual VersionLatestApprovedVersion { get; set;
> }
> > > > > > > > >    // other members
> > > > > > > > > }
> >
> > > > > > > > > public class Version
> > > > > > > > > {
> > > > > > > > >     public virtual int VersionId { get; set; }
> > > > > > > > >     public virtual Header Header { get; set; }
> > > > > > > > >     // other members
> > > > > > > > > }
> >
> > > > > > > > > The database looks almost exactly like this, with the
> obvious
> > > > > > > > > difference being that instead of object references there
> are
> > > > > foreign
> > > > > > > > > keys for the latest/latest approved versions pointing to
> the
> > > > > VersionId
> > > > > > > > > field, and the same for the Header and HeaderId.  The table
> for
> > > the
> > > > > > > > > header does allow both the latest and latest approved
> version
> > > ids
> > > > > to
> > > > > > > > > be null to allow the Header records to be inserted before
> the
> > > > > Versions
> > > > > > > > > are created.  The insert proc for the Version table takes
> care
> > > of
> > > > > > > > > updating the Header.LatestVersionId to point at newly
> inserted
> > > > > version
> > > > > > > > > record.
> >
> > > > > > > > > I have thus far been unsuccessful in creating mapping files
> for
> > > > > this
> > > > > > > > > pattern, the sticking point being the LatestVersion and
> > > > > > > > > LatestApprovedVersion properties. I'm pretty new to
> NHibernate,
> > > so
> > > > > I
> > > > > > > > > apologize if this is answered in another thread.
> >
> > > > > > > > > Any help is much appreciated. Thanks in advance.
> >
> > > > > > > > > --
> > > > > > > > > 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]<nhusers%[email protected]>
> <nhusers%[email protected]<nhusers%[email protected]>>
> > > <nhusers%[email protected]<nhusers%[email protected]>
> <nhusers%252bunsubscr...@googlegroup s.com>>
> > > > > <nhusers%[email protected]<nhusers%[email protected]>
> <nhusers%252bunsubscr...@googlegroup s.com>
> > > <nhusers%252bunsubscr...@googlegroup s.com>
> >
> > > > > > > <nhusers%[email protected]<nhusers%[email protected]>
> <nhusers%252bunsubscr...@googlegroup s.com>
> > > <nhusers%252bunsubscr...@googlegroup s.com>
> > > > > <nhusers%[email protected]<nhusers%[email protected]>
> <nhusers%25252bunsubscr...@googleg roups.com>
> > > <nhusers%25252bunsubscr...@googleg roups.com>
> >
> > > > > > > > > .
> > > > > > > > > For more options, visit this group at
> > > > > > > > >http://groups.google.com/group/nhusers?hl=en.
> >
> > > > > > > > --
> > > > > > > > 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]<nhusers%[email protected]>
> <nhusers%[email protected]<nhusers%[email protected]>>
> > > <nhusers%[email protected]<nhusers%[email protected]>
> <nhusers%252bunsubscr...@googlegroup s.com>>
> > > > > <nhusers%[email protected]<nhusers%[email protected]>
> <nhusers%252bunsubscr...@googlegroup s.com>
> > > <nhusers%252bunsubscr...@googlegroup s.com>
> >
> > > > > > > .
> > > > > > > For more options, visit this group at
> > > > > > >http://groups.google.com/group/nhusers?hl=en.
> >
> > > > > > --
> > > > > > 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]<nhusers%[email protected]>
> <nhusers%[email protected]<nhusers%[email protected]>>
> > > <nhusers%[email protected]<nhusers%[email protected]>
> <nhusers%252bunsubscr...@googlegroup s.com>>
> > > > > .
> > > > > For more options, visit this group at
> > > > >http://groups.google.com/group/nhusers?hl=en.
> >
> > > > --
> > > > 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]<nhusers%[email protected]>
> <nhusers%[email protected]<nhusers%[email protected]>>
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/nhusers?hl=en.
> >
> > --
> > 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]<nhusers%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/nhusers?hl=en.
>
>


-- 
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.

Reply via email to