Hi RP,

Now things work fine, but the configuration is only like this

Budget.hbm.xml

    <many-to-one name="oAirport" column="AirportID"
>       class="Tec.Core.Model.Airport, Tec.Core" not-null="true" />
>     <many-to-one name="oInvestmentCode" column="InvestmentCodeID"
>       class="Tec.Core.Model.InvestmentCode, Tec.Core"  not-null="true" /> 
>     <many-to-one name="oInvestmentType" column="InvestmentTypeID"
>       class="Tec.Core.Model.InvestmentType, Tec.Core" not-null="true" /> 



Airport.hbm.xml

    <bag name="Budgets" table="tblBudget" inverse="true" >
>       <key column="AirportID" />
>       <one-to-many class="Tec.Core.Model.Budget, Tec.Core" />
>     </bag>


InvestmentCode.hbm.xml

    <bag name="Budgets" table="tblBudget" inverse="true" >
>       <key column="InvestmentCodeID" />
>       <one-to-many class="Tec.Core.Model.Budget, Tec.Core" />
>     </bag>


InvestmentType.hbm.xml

    <bag name="Budgets" table="tblBudget" inverse="true"  >
>       <key column="InvestmentTypeID" />
>       <one-to-many class="Tec.Core.Model.Budget, Tec.Core" />
>     </bag> 



And in Default.aspx.cs, I have to do these to have record save to DB


                Airport objA = new Airport("A", "BCD");
                InvestmentCode objIC = new InvestmentCode("1000", "ABCD");
                InvestmentType objIT = new InvestmentType("Capex");

                Budget objBg = new Budget();
                objBg.oAirport = objA;
                objBg.oInvestmentCode = objIC;
                objBg.oInvestmentType = objIT;
                objBg.BudgetAmount = 10000;
                objBg.BudgetYear = 2014;
              


                daoFactory.GetAirportDao().Save(objA);                
                daoFactory.GetInvestmentCodeDao().Save(objIC);
                daoFactory.GetInvestmentTypeDao().Save(objIT);

                daoFactory.GetBudgetDao().Save(objBg);

It sound like I have to manage all Entities by my self not with the help of 
NHibernate through Parent-Child mapping. Where we only save parent then 
child associated is also saved.

Best regards,

Veasna 




On Tuesday, February 25, 2014 4:54:42 PM UTC+7, Ricardo Peres wrote:
>
> For collections, you can instantiate them in the constructor:
>
> this.Budgets = new List<Budget>();
>
> RP
>
>
> On Tuesday, February 25, 2014 9:06:59 AM UTC, Ricardo Peres wrote:
>>
>> Well, you are returning a list which encapsulates a read-only collection!!
>> Replace all your fields with auto properties:
>>
>> * public string InvestmentTypeNote {*
>> *            get;*
>> *            set;*
>> *        }*
>> *        public IList<Budget> Budgets {*
>> *            get;*
>> *            protected set;*
>> *        }*
>>
>> This will solve your problem.
>>
>> RP
>>
>>
>> On Tuesday, February 25, 2014 2:15:30 AM UTC, Veasna MUCH wrote:
>>>
>>> When I update xml schmas in budget.hbm.xml as your suggestion 
>>>
>>>
>>>> *    <many-to-one name="oAirport" column="AirportID"*
>>>> *      class="Tec.Core.Model.Airport, Tec.Core" not-null="true" 
>>>> cascade="save-update"/>*
>>>> *    <many-to-one name="oInvestmentCode" column="InvestmentCodeID"*
>>>> *      class="Tec.Core.Model.InvestmentCode, Tec.Core" not-null="true" 
>>>> cascade="save-update"/>*
>>>> *    <many-to-one name="oInvestmentType" column="InvestmentTypeID"**  
>>>>     class="Tec.Core.Model.InvestmentType, Tec.Core" not-null="true" 
>>>> cascade="save-update"/>  *
>>>
>>>     
>>>
>>> I got the following exception class InvestmentCode.cs
>>>
>>> ------------------------------------------------------------------------------------------------------------------------
>>>
>>> *public void AddBudget(Budget imntBudget){*
>>> *            if (imntBudget != null && 
>>> !_lInvestmentCodeBudgets.Contains(imntBudget)){*
>>> *                imntBudget.oInvestmentCode = this;*
>>>
>>> *                _lInvestmentCodeBudgets.Add(imntBudget); 
>>>  // System.NotSupportedException : Collection is read-only*
>>> *            }*
>>> *        }*
>>>
>>> I do not know what going on here again.
>>>
>>> Any suggestion?
>>>
>>> Best regards,
>>>
>>> Veasna
>>>
>>>
>>>
>>> On Monday, February 24, 2014 10:57:38 PM UTC+7, Ricardo Peres wrote:
>>>>
>>>> Try this:
>>>>
>>>> <many-to-one name="oInvestmentType" column="InvestmentTypeID"
>>>>       class="Tec.Core.Model.InvestmentType, Tec.Core" not-null="true" 
>>>> cascade="save-update" 
>>>> />  
>>>>
>>>> On Monday, February 24, 2014 11:33:12 AM UTC, Veasna MUCH wrote:
>>>>>
>>>>>
>>>>> Good afternoon,
>>>>>
>>>>> I have following database schemas
>>>>>
>>>>>
>>>>> <https://lh4.googleusercontent.com/-TnjRxHcktjM/UwscRDvMOGI/AAAAAAAABx4/_6XhBJFgic4/s1600/ER+Diagram.JPG>
>>>>> Here is my mapping file 
>>>>>
>>>>> *Airport*
>>>>> -----------------------------------------------------------
>>>>>
>>>>> <?xml version="1.0" encoding="utf-8" ?>
>>>>>> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
>>>>>>   <class name="Tec.Core.Model.Airport, Tec.Core" table="tblAirport" 
>>>>>> lazy="false">
>>>>>>     <id name="ID" column="AirportID" unsaved-value="0">
>>>>>>       <generator class="identity" />
>>>>>>     </id>
>>>>>>     <property name="AirportCode" column="AirportCode" />
>>>>>>     <property name="AirportFullName" column="AirportFullName" />
>>>>>>    
>>>>>>     <bag name="Budgets" table="tblBudget" inverse="true" 
>>>>>> cascade="save-update">
>>>>>>       <key column="AirportID" />
>>>>>>       <one-to-many class="Tec.Core.Model.Budget, Tec.Core" />
>>>>>>     </bag>
>>>>>>     
>>>>>>   </class>
>>>>>> </hibernate-mapping>
>>>>>
>>>>>
>>>>>
>>>>>    * public class Airport:Entity<int> *
>>>>> *    {*
>>>>> *        private string _airportCode="";*
>>>>> *        private string _airportFullName="";*
>>>>> *        private IList<Budget> _airportBudgets = new List<Budget>();*
>>>>>
>>>>> *        private Airport() { }*
>>>>> *        public Airport(string AirportCode, string AirportFullName) {*
>>>>> *            this._airportCode = AirportCode;*
>>>>> *            this._airportFullName = AirportFullName; *
>>>>> *        }*                
>>>>> *         public  string AirportCode**  {*
>>>>> *            get { return _airportCode; }*
>>>>> *            set { _airportCode = value; }*
>>>>> *        }*
>>>>> *        public  string AirportFullName** {*
>>>>> *            get { return _airportFullName; }*
>>>>> *            set { _airportFullName = value; }*
>>>>> *        }*
>>>>> *        public IList<Budget> Budgets** {*
>>>>> *            get { return new 
>>>>> List<Budget>(_airportBudgets).AsReadOnly(); }*
>>>>> *            protected set { _airportBudgets = value; }*
>>>>> *        }*
>>>>> *        public void AddBudget(Budget air_budget)**{*
>>>>> *            if (air_budget != null && 
>>>>> !_airportBudgets.Contains(air_budget)){*
>>>>> *                air_budget.oAirport = this; *
>>>>> *                _airportBudgets.Add(air_budget);*
>>>>> *            }*
>>>>> *        }*
>>>>>
>>>>> *        public override int GetHashCode(){*
>>>>> *            return (GetType().FullName + "|" + 
>>>>> _airportCode.GetHashCode()).GetHashCode();*
>>>>> *        }*
>>>>>
>>>>> *    }*
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> InvestmentCode
>>>>> --------------------------------------------------------------
>>>>>
>>>>> <?xml version="1.0" encoding="utf-8" ?>
>>>>>> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
>>>>>>   <class name="Tec.Core.Model.InvestmentCode, Tec.Core" 
>>>>>> table="tblInvestmentCode" lazy="false">
>>>>>>     <id name="ID" column="InvestmentCodeID" unsaved-value="0">
>>>>>>       <generator class="identity" />
>>>>>>     </id>
>>>>>>     <property name="InvCode" column="InvestmentCode" />
>>>>>>     <property name="InvCodeNote" column="InvestmentCodeNote" />
>>>>>>   
>>>>>>     <bag name="Budgets" table="tblBudget" inverse="true" 
>>>>>> cascade="save-update">
>>>>>>       <key column="InvestmentCodeID" />
>>>>>>       <one-to-many class="Tec.Core.Model.Budget, Tec.Core" />
>>>>>>     </bag>
>>>>>>     
>>>>>>   </class>
>>>>>> </hibernate-mapping>
>>>>>
>>>>>
>>>>>
>>>>>  *  public class InvestmentCode: Entity<int> *
>>>>> *    {*
>>>>>
>>>>> *        private string _investmentCode="";*
>>>>> *        private string _investmentCodeNote="";*
>>>>> *        private IList<Budget> _lstinvestmentCodeBudgets = new 
>>>>> List<Budget>();*
>>>>>
>>>>> *        private InvestmentCode() { }*
>>>>> *        public InvestmentCode(string investmentCode, string 
>>>>> InvestmentCodeNote) {*
>>>>> *            this._investmentCode = investmentCode;*
>>>>> *            this._investmentCodeNote = InvestmentCodeNote ; *
>>>>> *        }      *
>>>>> *        public string InvCode {*
>>>>> *            get { return _investmentCode ; }*
>>>>> *            set { _investmentCode  = value; }*
>>>>> *        }*
>>>>> *        public string InvCodeNote {*
>>>>> *            get { return _investmentCodeNote ; }*
>>>>> *            set { _investmentCodeNote  = value; }*
>>>>> *        }*
>>>>> *        public IList<Budget> Budgets {*
>>>>> *            get { return new 
>>>>> List<Budget>(_lstinvestmentCodeBudgets).AsReadOnly(); }*
>>>>> *            protected set { _lstinvestmentCodeBudgets = value; }*
>>>>> *        }*
>>>>> *        public void AddBudget(Budget investment_code_budget) {*
>>>>> *            if (investment_code_budget != null && 
>>>>> !_lstinvestmentCodeBudgets.Contains(investment_code_budget)){*
>>>>> *                investment_code_budget.oInvestmentCode = this; *
>>>>> *                
>>>>> _lstinvestmentCodeBudgets.Add(investment_code_budget);*
>>>>> *            }*
>>>>> *        }        *
>>>>> *        public override int GetHashCode(){*
>>>>> *            return (GetType().FullName +"|"+ 
>>>>> _investmentCode.GetHashCode()).GetHashCode();*
>>>>> *        }*
>>>>> *    }*
>>>>>
>>>>>
>>>>> InvestmentType
>>>>>
>>>>> -------------------------------------------------------------------------------
>>>>>
>>>>> <?xml version="1.0" encoding="utf-8" ?>
>>>>>> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
>>>>>>   <class name="Tec.Core.Model.InvestmentType, Tec.Core" 
>>>>>> table="tblInvestmentType" lazy="false">
>>>>>>     <id name="ID" column="InvestmentTypeID" unsaved-value="0">
>>>>>>       <generator class="identity" />
>>>>>>     </id>
>>>>>>     <property name="InvestmentTypeNote" column="InvestmentTypeNote" 
>>>>>> />    
>>>>>>     
>>>>>>     <bag name="Budgets" table="tblBudget" inverse="true" 
>>>>>>  cascade="save-update">
>>>>>>       <key column="InvestmentTypeID" />
>>>>>>       <one-to-many class="Tec.Core.Model.Budget, Tec.Core" />
>>>>>>     </bag>
>>>>>>     
>>>>>>   </class>
>>>>>> </hibernate-mapping>
>>>>>
>>>>>
>>>>>
>>>>> * public class InvestmentType: Entity<int> **{*
>>>>>        
>>>>> *        private string _investmentTypeNote="";*
>>>>> *        private IList<Budget> _lstInvestmentTypeBudgets = new 
>>>>> List<Budget>();*
>>>>>
>>>>> *        private InvestmentType() { }*
>>>>>
>>>>> *        public InvestmentType(string InvestmentTypeNote){            *
>>>>> *            this._investmentTypeNote = InvestmentTypeNote ; *
>>>>> *        }*
>>>>> *        public string InvestmentTypeNote {*
>>>>> *            get { return _investmentTypeNote ; }*
>>>>> *            set { _investmentTypeNote  = value; }*
>>>>> *        }*
>>>>> *        public IList<Budget> Budgets {*
>>>>> *            get { return new 
>>>>> List<Budget>(_lstInvestmentTypeBudgets).AsReadOnly(); }*
>>>>> *            protected set { _lstInvestmentTypeBudgets = value; }*
>>>>> *        }*
>>>>> *        public void AddBudget(Budget investment_type_budget)  {*
>>>>> *            if (investment_type_budget != null && 
>>>>> !_lstInvestmentTypeBudgets.Contains(investment_type_budget)){*
>>>>> *                investment_type_budget.oInvestmentType = this; *
>>>>> *                
>>>>> _lstInvestmentTypeBudgets.Add(investment_type_budget);*
>>>>> *            }*
>>>>> *        }*
>>>>> *        public override int GetHashCode(){*
>>>>> *            return (GetType().FullName + "|"+ 
>>>>> _investmentTypeNote.GetHashCode()).GetHashCode();*
>>>>> *        }*
>>>>> *    }*
>>>>>
>>>>>
>>>>> Budget
>>>>>
>>>>> ------------------------------------------------------------------------
>>>>>
>>>>> <?xml version="1.0" encoding="utf-8" ?>
>>>>>> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
>>>>>>   <class name="Tec.Core.Model.Budget, Tec.Core" table="tblBudget" 
>>>>>> lazy="false">
>>>>>>     <id name="ID" column="BudgetID" unsaved-value="0">
>>>>>>       <generator class="identity" />
>>>>>>     </id>
>>>>>>     <property name="BudgetAmount" column="BudgetAmount" />
>>>>>>     <property name="BudgetYear" column="BudgetYear" />
>>>>>>     
>>>>>>     <many-to-one name="oAirport" column="AirportID"
>>>>>>       class="Tec.Core.Model.Airport, Tec.Core" not-null="true" />
>>>>>>     <many-to-one name="oInvestmentCode" column="InvestmentCodeID"
>>>>>>       class="Tec.Core.Model.InvestmentCode, Tec.Core" not-null="true" 
>>>>>> />
>>>>>>     <many-to-one name="oInvestmentType" column="InvestmentTypeID"
>>>>>>       class="Tec.Core.Model.InvestmentType, Tec.Core" not-null="true" 
>>>>>> />  
>>>>>>     
>>>>>>   </class>
>>>>>> </hibernate-mapping>
>>>>>
>>>>>
>>>>>
>>>>>    * public class Budget:Entity<long> *
>>>>> *    {*
>>>>> *        private float _budgetAmount;*
>>>>> *        private int _budgetYear;*
>>>>> *        private InvestmentType _investmentType;*
>>>>> *        private InvestmentCode _investmentCode;*
>>>>> *        private Airport _airport;*
>>>>>
>>>>> *        public Budget() { }*
>>>>> *        public float BudgetAmount** {*
>>>>> *            get{return _budgetAmount; }*
>>>>> *            set{_budgetAmount = value;}*
>>>>> *        }*        
>>>>> *        public int BudgetYear** {*
>>>>> *            get{return _budgetYear; }*
>>>>> *            set{_budgetYear = value;}*
>>>>> *        }*        
>>>>> *        public Airport oAirport**{*
>>>>> *            get{return _airport; }*
>>>>> *            set{_airport = value;}*
>>>>> *        }*        
>>>>> *        public InvestmentType oInvestmentType{*
>>>>> *            get{return _investmentType; }*
>>>>> *            set{_investmentType  = value;}*
>>>>> *        }*        
>>>>> *        public InvestmentCode oInvestmentCode {*
>>>>> *            get{return _investmentCode ; }*
>>>>> *            set{_investmentCode = value;}*
>>>>> *        }*
>>>>> *        public override int GetHashCode(){*
>>>>> *            return (GetType().FullName + "|" + _airport.GetHashCode() 
>>>>> +"|"+ _investmentCode.GetHashCode()+"|"+ 
>>>>> _investmentType.GetHashCode()).GetHashCode();*
>>>>> *        }*
>>>>>
>>>>> *    }*
>>>>>
>>>>>
>>>>> And in my Default.asp.cs
>>>>>
>>>>> I have following code : 
>>>>>
>>>>>             Airport objA = new Airport("NA", "New Airport")
>>>>>             InvestmentCode objIC = new InvestmentCode("1000", "ABCD");
>>>>>             InvestmentType objIT = new InvestmentType("Capex");
>>>>>
>>>>>             Budget objBg = new Budget();
>>>>>             objBg.oAirport = objA;
>>>>>             objBg.oInvestmentCode = objIC;
>>>>>             objBg.oInvestmentType = objIT;
>>>>>             objBg.BudgetAmount = 10000;
>>>>>             objBg.BudgetYear = 2014;
>>>>>
>>>>>             objA.AddBudget(objBg);
>>>>>             AirportDao.SaveOrUpdate(objA);
>>>>>
>>>>>             objIC.AddBudget(objBg);
>>>>> *            daoFactory.**GetInvestmentCodeDao()**.Save(*objIC*); 
>>>>>  //Error occur here **not-null property references a null or 
>>>>> transient value Tec.Core.Model.Budget.oInvestmentType*
>>>>>             
>>>>>
>>>>>             objIT.AddBudget(objBg);            
>>>>>             daoFactory.GetInvestmentTypeDao().Save(objIT);     
>>>>>
>>>>>
>>>>> I have no idea what going on to these problem. I am very new to 
>>>>> NHibernate and would like to start using this in my development.
>>>>>
>>>>> Could you please guide me how to solve this problem?
>>>>>
>>>>> Best regards,
>>>>>
>>>>> Veasna
>>>>>
>>>>>

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to