Calling tries to lazy load in every properties getter I've inherited a class which has a bunch of properties defined as:

public int ID
{
    get { return m_nOID; }
    set { m_nOID = value; }
}

public int ConxnDetail
{
    get { LoadDetails(); return m_nConxnDetail; }
    set { m_nConxnDetail = value; }
}

public bool ConxnConstraints
{
    get { LoadDetails(); return m_bConxnConstraints; }
    set { m_bConxnConstraints = value; }
}

public bool IsShowCables
{
    get { LoadDetails(); return m_bIsShowCables; }
    set { m_bIsShowCables = value; }
}

public int DefaultQueue
{
    get { LoadDetails(); return m_nDefaultQueue; }
    set { m_nDefaultQueue = value; }
}

private User LoadDetails()
{
    if (!IsLoaded &amp;&amp; !IsNew)
    {
        Logger.InfoFormat("Loading user details. UserID: [{0}]", m_nOID);
        User user = RemoteActivator.Create&lt;RemoteUser&gt;().GetUserById(m_nOID);
        if (user != null)
        {
            CopyDetails(user);
            MarkLoaded();
        }
        else
            ClearDetails();
    }
    return this;
}


I would absolutely love to clean up the conventions here a bit and use only automatic getters/setters. Is this possible to do? If not, any other suggestions on reducing the boilerplate needed?
There is the INotifyPropertyChanged event handler, but I'm not sure why you would need that in this case?  Instead why not just load the details when the ID changes as that seems to be the only value that will change between LoadDetails calls.

Perhaps something like:

public int ID
{
    get { return m_nOID; }
    set {

       if(m_NOID != value) {
          InitialiseUserDetails(m_nOID);
       }

       m_nOID = value; 
    }
}


If this was ok, you could remove the private backing fields as I believe you wish to do.