Click here to Skip to main content
15,884,298 members
Articles / Web Development / ASP.NET

NHibernate Best Practices with ASP.NET, 1.2nd Ed.

Rate me:
Please Sign up or sign in to vote.
4.96/5 (322 votes)
11 Jun 2008CPOL60 min read 8.6M   35.9K   1.1K  
This article describes best practices for leveraging the benefits of NHibernate 1.2, ASP.NET, generics and unit testing together.
using System.Reflection;
using EnterpriseSample.Core.Domain;
using ProjectBase.Utils;

namespace EnterpriseSample.Tests.Domain
{
    /// <summary>
    /// I've gone back and forth as to when it is appropriate to use reflection for 
    /// accessing/setting a private/protected members.  It is imperitive that the <see cref="DomainObject{IdT}.ID"/>
    /// property is read-only and set only by the ORM.  With that said, some unit tests need 
    /// ID set accordingly; therefore, this utility enables that ability.  This class should 
    /// never be used outside of the unit tests.  Instead, implement <see cref="IHasAssignedId{IdT}" /> to 
    /// expose a public setter.
    /// </summary>
    public class DomainObjectIdSetter<IdT>
    {
        /// <summary>
        /// Uses reflection to set the ID of a <see cref="DomainObject{IdT}" />.
        /// </summary>
        public void SetIdOf(DomainObject<IdT> domainObject, IdT id) {
            // Set the data property reflectively
            PropertyInfo idProperty = domainObject.GetType().GetProperty(NAME_OF_ID_MEMBER,
                BindingFlags.Public | BindingFlags.Instance);

            Check.Ensure(idProperty != null, "idProperty could not be found");

            idProperty.SetValue(domainObject, id, null);
        }

        private const string NAME_OF_ID_MEMBER = "ID";
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions