NHibernate FetchMode.Lazy

Posted by RyanFetz on Stack Overflow See other posts from Stack Overflow or by RyanFetz
Published on 2010-03-17T13:19:22Z Indexed on 2010/03/17 13:21 UTC
Read the original article Hit count: 342

Filed under:

I have an object which has a property on it that has then has collections which i would like to not load in a couple situations. 98% of the time i want those collections fetched but in the one instance i do not. Here is the code I have... Why does it not set the fetch mode on the properties collections?

[DataContract(Name = "ThemingJob", Namespace = "")]
[Serializable]
public class ThemingJob : ServiceJob
{
    [DataMember]
    public virtual Query Query { get; set; }

    [DataMember]
    public string Results { get; set; }
}

[DataContract(Name = "Query", Namespace = "")]
[Serializable]
public class Query : LookupEntity<Query>, DAC.US.Search.Models.IQueryEntity
{

    [DataMember]
    public string QueryResult { get; set; }

    private IList<Asset> _Assets = new List<Asset>();

    [IgnoreDataMember]
    [System.Xml.Serialization.XmlIgnore]
    public IList<Asset> Assets { get { return _Assets; } set { _Assets = value; } }

    private IList<Theme> _Themes = new List<Theme>();

    [IgnoreDataMember]
    [System.Xml.Serialization.XmlIgnore]
    public IList<Theme> Themes { get { return _Themes; } set { _Themes = value; } }

    private IList<Affinity> _Affinity = new List<Affinity>();

    [IgnoreDataMember]
    [System.Xml.Serialization.XmlIgnore]
    public IList<Affinity> Affinity { get { return _Affinity; } set { _Affinity = value; } }

    private IList<Word> _Words = new List<Word>();

    [IgnoreDataMember]
    [System.Xml.Serialization.XmlIgnore]
    public IList<Word> Words { get { return _Words; } set { _Words = value; } }
}


        using (global::NHibernate.ISession session = NHibernateApplication.GetCurrentSession())
        {
            global::NHibernate.ICriteria criteria = session.CreateCriteria(typeof(ThemingJob));
            global::NHibernate.ICriteria countCriteria = session.CreateCriteria(typeof(ThemingJob));

            criteria.AddOrder(global::NHibernate.Criterion.Order.Desc("Id"));

            var qc =  criteria.CreateCriteria("Query");
            qc.SetFetchMode("Assets", global::NHibernate.FetchMode.Lazy);
            qc.SetFetchMode("Themes", global::NHibernate.FetchMode.Lazy);
            qc.SetFetchMode("Affinity", global::NHibernate.FetchMode.Lazy);
            qc.SetFetchMode("Words", global::NHibernate.FetchMode.Lazy);

            pageIndex = Convert.ToInt32(pageIndex) - 1; // convert to 0 based paging index

            criteria.SetMaxResults(pageSize);
            criteria.SetFirstResult(pageIndex * pageSize);

            countCriteria.SetProjection(global::NHibernate.Criterion.Projections.RowCount());

            int totalRecords = (int)countCriteria.List()[0];

            return criteria.List<ThemingJob>().ToPagedList<ThemingJob>(pageIndex, pageSize, totalRecords);
        }

© Stack Overflow or respective owner

Related posts about nhibernate