Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 368603
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 12, 20262026-05-12T13:50:23+00:00 2026-05-12T13:50:23+00:00

I have a database schema that stores one Page with many Revisions. Like a

  • 0

I have a database schema that stores one “Page” with many “Revisions”. Like a simple wiki.

90% of the time when I load a page, I am just interested in the latest revision. However, sometimes I want all revisions.

With NHibernate I can map the Page to the Revisions, and tell it to lazy-load. However, when I access the latest revision, it will load all other revisions – a big waste of I/O.

My page class currently resembles:

public class Page
{
    public Page()
    {
        Revisions = new HashedSet<Revision>();
    }

    public virtual ISet<Revision> Revisions { get; private set; }

    public virtual Revision LatestRevision
    {
        get { return Revisions.OrderByDescending(x => x.Revised).FirstOrDefault(); }
    }

    public virtual Revision Revise()
    {
        var revision = new Revision();
        // ...
        revision.Entry = this;
        revision.Revised = DateTime.UtcNow;
        Revisions.Add(revision);
        return revision;
    }
}

How would I model this such that the LatestRevision is automatically loaded when the Page is loaded, but the other revisions are lazy-loaded if, for instance, I attempted to iterate them?

I would particularly like a solution that works with LINQ to NHibernate, but using ICriteria (or even SQL if I have to) is good enough.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-12T13:50:23+00:00Added an answer on May 12, 2026 at 1:50 pm

    I ended up going with the solution from here:

    Partially Populate Child Collection with NHibernate

    My page now has these properties:

    public virtual Revision CurrentRevision 
    { 
        get
        {
            return _revision ?? Revisions.OrderByDescending(x => x.Revised).FirstOrDefault();
        }
        set { _revision = value; }
    }
    
    public virtual ISet<Revision> Revisions { get; private set; }
    

    The loading code is:

    public Page GetPage(string name)
    {
        var entryHash = (Hashtable)_session.CreateCriteria<Page>("page")
            .Add(Restrictions.Eq("page.Name", name))
            .CreateCriteria("Revisions", "rev")
                .AddOrder(Order.Desc("rev.Revised"))
            .SetMaxResults(1)
            .SetResultTransformer(Transformers.AliasToEntityMap)
            .UniqueResult();
        var page = (Page)entryHash["page"];
        page.LatestRevision = (Revision)entryHash["rev"];
        return page;
    }
    

    NHProf shows this as the only query being executed now, which is perfect:

    SELECT   top 1 this_.Id            as Id3_1_,
                   this_.Name          as Name3_1_,
                   this_.Title         as Title3_1_,
                   rev1_.Id            as Id0_0_,
                   rev1_.Body          as Body0_0_,
                   rev1_.Revised       as Revised0_0_,
                   ....
    FROM     [Page] this_
             inner join [Revision] rev1_
               on this_.Id = rev1_.PageId
    WHERE    this_.Name = 'foo' /* @p0 */
    ORDER BY rev1_.Revised desc
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a database schema that is similar to the following: | User |
I have two tables in my database schema that represent an entity having a
I have a database schema in SQL 2005 that I want to copy to
I have a Sql Database (which I have no control over the schema) that
I have two websites that have an almost identical database schema. the only difference
I have a pretty complex database schema and would like to know if there
I am working on a site that has a database schema like a tree.
I have a MySQL database that contains many tables, some of them created dynamically
Say I have a database that stores table data by year using an identical
Given a table named person (in a MySQL database/schema), kind of like this one:

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.