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%[email protected]<nhusers%[email protected]>
> <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>
> >
> > > > > .
> > > > > 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