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.