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.