/// <summary>
        /// Creates a new instance of an existing (persisted) loan application.
        /// </summary>
        /// <param name="appId">The identity of the loan application.</param>
        public LoanApplication(long appId)
            : base(appId)
        {
            // TODO: add additional fill methods for the rest of the loan object

            // load up the data information
            MISMO.BusinessObjects.DataInformationCollection dats = this.GetDataInformationCollection();
            if (dats != null && dats.Count > 0)
            {
                _datainformation = new DataInformation();
                MISMO.Entities.DataInformationBase datbase = dats[0];
                _datainformation.SetMembers(ref datbase);
            }

            // load up the additional case data.
            MISMO.BusinessObjects.AdditionalCaseDataCollection addcasecol = this.GetAdditionalCaseDataCollection();
            if (addcasecol != null && addcasecol.Count > 0)
            {
                MISMO.Entities.AdditionalCaseDataBase addcasebase = addcasecol[0] as MISMO.Entities.AdditionalCaseDataBase;
                _additionalcasedata = new AdditionalCaseData();
                _additionalcasedata.SetMembers(ref addcasebase);
            }

            // load up the down payment information
            _downpayments = this.GetDownPayments();

            // load up the interviewer information
            MISMO.BusinessObjects.InterviewerInformationCollection intvcol = this.GetInterviewerInformationCollection();
            if (intvcol != null && intvcol.Count > 0)
                _interviewer = intvcol[0];

            // load up the loan product data
            MISMO.BusinessObjects.LoanProductDataCollection loanproducts = this.GetLoanProductDataCollection();
            if (loanproducts != null && loanproducts.Count > 0)
            {
                MISMO.Entities.LoanProductDataBase lpbase = loanproducts[0];
                _loanproductdata = new LoanProductData();
                _loanproductdata.SetMembers(ref lpbase);
            }

            // load up the loan purpose
            MISMO.BusinessObjects.LoanPurposes purps = this.GetLoanPurposes();
            if (purps != null && purps.Count > 0)
            {
                MISMO.Entities.LoanPurposeBase purpbase = purps[0];
                _purpose = new LoanPurpose();
                _purpose.SetMembers(ref purpbase);
            }

            // load up the loan qualification information
            MISMO.BusinessObjects.LoanQualifications lqcol = this.GetLoanQualifications();
            if (lqcol != null && lqcol.Count > 0)
            {
                MISMO.Entities.LoanQualificationBase lqbase = lqcol[0] as MISMO.Entities.LoanQualificationBase;
                _loanqualification.SetMembers(ref lqbase);
            }

            // load up the mortgage terms.
            MISMO.BusinessObjects.MortgageTermsCollection mtgterms = this.GetMortgageTermsCollection();
            if (mtgterms != null && mtgterms.Count > 0)
                _mortgageterms = mtgterms[0];

            // loan up the property information
            MISMO.BusinessObjects.Properties props = this.GetProperties();
            if (props != null && props.Count > 0)
            {
                _prop = new AUS.Property();
                MISMO.Entities.PropertyBase propbase = props[0];
                _prop.SetMembers(ref propbase);
            }

            // load up the proposed housing expenses
            _proposedHousingExpenses = this.GetProposedHousingExpenses();

            // load up the REO properties
            _reoProperties = this.GetREOProperties();

            // load up the title holder objects
            _titleholders = this.GetTitleHolders();

            // load up the transaction details
            MISMO.BusinessObjects.TransactionDetails trandets = this.GetTransactionDetails();
            if (trandets != null && trandets.Count > 0)
            {
                MISMO.Entities.TransactionDetailBase trandbase = trandets[0];
                _transdetail = new AUS.TransactionDetail();
                _transdetail.SetMembers(ref trandbase);
            }

            // load up the borrower information
            MISMO.BusinessObjects.Borrowers bws = this.GetBorrowers();
            MISMO.Entities.BorrowerBase bwsbase = null;
            for(int i = 0, j = bws.Count; i<j; i++)
            {
                MISMO.BusinessObjects.AUS.Borrower ausbw = new Borrower();
                bwsbase = bws[i] as MISMO.Entities.BorrowerBase;
                ausbw.SetMembers(ref bwsbase);
                _borrowers.Add(ausbw);
            }

            // finally update the checksum if this constructor wasn't called from a descendant.
            if (this.GetType() == typeof(MISMO.BusinessObjects.AUS.LoanApplication))
            {
                RecalculateChecksum();
            }
        }