I never use field, always auto properties. As you know, field doesn't work with lazy properties.
RP On Wednesday, February 26, 2014 8:47:39 AM UTC, Alexander I. Zaytsev wrote: > > I think it is better to change access in mapping to "field" > > > 2014-02-25 22:54 GMT+13:00 Ricardo Peres <[email protected] <javascript:>>: > >> 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] <javascript:>. >> To post to this group, send email to [email protected]<javascript:> >> . >> Visit this group at http://groups.google.com/group/nhusers. >> For more options, visit https://groups.google.com/groups/opt_out. >> > > -- 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.
