Try these for understanding generators, especially the problem with post-insert generators (IDENTITY):
http://fabiomaulo.blogspot.com/2009/02/nh210-generators-behavior-explained.html http://nhforge.org/blogs/nhibernate/archive/2009/03/20/nhibernate-poid-generators-revealed.aspx -Markus 2011/2/10 Ryan Aimel Estandarte <[email protected]>: > Hi Markus, > Thanks for the reply. I will try your suggestion. However I want to ask the > purpose of "hilo". From what I know, "native" gets the seeding of SQL, thus > getting their identity seed (if this is what I understand). > Ryan. :) > On Thu, Feb 10, 2011 at 1:35 PM, Markus Zywitza <[email protected]> > wrote: >> >> Cascading and native generators are a bad team... >> >> Without even knowing the exception's type it's only educated guessing, >> but try replacing native with hilo and look whether that helps. >> >> Or save the Adress objects first, I guess this cascade runs into the >> error. >> >> -Markus >> >> 2011/2/8 Ryan Aimel Estandarte <[email protected]>: >> > Guys, I need help on this. I can't seem to find any solution to this. >> > I'm trying to insert records to 3 classes/tables. However, the error >> > occurred when the records are about to be inserted. >> > I'm on a complete dead-end on this case. Below are the classes and the >> > mapping files >> > static void Main(string[] args) >> > { >> > Configuration cfg = new Configuration(); >> > >> > >> > cfg.Properties.Add(NHibernate.Cfg.Environment.ConnectionProvider, >> > typeof(NHibernate.Connection.DriverConnectionProvider) >> > .AssemblyQualifiedName); >> > cfg.Properties.Add(NHibernate.Cfg.Environment.Dialect, >> > typeof(NHibernate.Dialect.MsSql2008Dialect) >> > .AssemblyQualifiedName); >> > >> > cfg.Properties.Add(NHibernate.Cfg.Environment.ConnectionDriver, >> > typeof(NHibernate.Driver.SqlClientDriver) >> > .AssemblyQualifiedName); >> > >> > cfg.Properties.Add(NHibernate.Cfg.Environment.ConnectionString, >> > @"Data Source=DBW-BSG-N87\sqlexpress;Initial >> > Catalog=NHibernateDB;Integrated Security=True"); >> > >> > >> > cfg.Properties.Add(NHibernate.Cfg.Environment.ProxyFactoryFactoryClass, >> > >> > >> > typeof(NHibernate.ByteCode.Castle.ProxyFactoryFactory).AssemblyQualifiedName); >> > cfg.AddAssembly(typeof(Address).Assembly); >> > //Create Session Factory >> > ISessionFactory sessionFactory = cfg.BuildSessionFactory(); >> > //Create Session and Transaction >> > ISession session = sessionFactory.OpenSession(); >> > ITransaction tx = session.BeginTransaction(); >> > //Insert records >> > //Contact contact = new Contact("Brando", "Washington", >> > "[email protected]"); >> > //session.Save(contact); >> > //tx.Commit(); >> > Contact ordCntct = new Contact("Martha", "Washington", >> > "[email protected]"); >> > Address ordAddr = new Address("1600 Pennsylvania Ave, NW", >> > null, >> > "Washington, DC", "20500"); >> > ordAddr.AddressContact = ordCntct; >> > ordCntct.ContactAddress = new List<Address>(); >> > ordCntct.ContactAddress.Add(ordAddr); >> > OrderHeader header = new OrderHeader(); >> > header.Number = "0000001"; >> > header.OrderDate = DateTime.Now; >> > header.BillToContact = ordCntct; >> > header.BillToAddress = ordAddr; >> > header.ShipToContact = ordCntct; >> > header.ShipToAddress = ordAddr; >> > //OrderHeader header = new OrderHeader("00001", >> > DateTime.Now, >> > -1, -1, ordCntct, ordCntct, ordAddr, ordAddr); >> > session.SaveOrUpdate(header); >> > tx.Commit(); >> > } >> > using System; >> > using System.Collections.Generic; >> > using System.Linq; >> > using System.Text; >> > namespace Ordering.Data >> > { >> > public class Contact >> > { >> > #region Properties >> > private int _ID; >> > private string _lastName; >> > private string _firstName; >> > private string _email; >> > private IList<Phone> _contactPhone; >> > private IList<Address> _contactAddress; >> > private IList<OrderHeader> _billToContacts; >> > private IList<OrderHeader> _shipToContacts; >> > public virtual IList<OrderHeader> ShipToContacts >> > { >> > get { return _shipToContacts; } >> > set { _shipToContacts = value; } >> > } >> > public virtual IList<OrderHeader> BillToContacts >> > { >> > get { return _billToContacts; } >> > set { _billToContacts = value; } >> > } >> > public virtual IList<Address> ContactAddress >> > { >> > get { return _contactAddress; } >> > set { _contactAddress = value; } >> > } >> > public virtual IList<Phone> ContactPhone >> > { >> > get { return _contactPhone; } >> > set { _contactPhone = value; } >> > } >> > public virtual string Email >> > { >> > get { return _email; } >> > set { _email = value; } >> > } >> > public virtual string FirstName >> > { >> > get { return _firstName; } >> > set { _firstName = value; } >> > } >> > public virtual string LastName >> > { >> > get { return _lastName; } >> > set { _lastName = value; } >> > } >> > public virtual int ID >> > { >> > get { return _ID; } >> > set { _ID = value; } >> > } >> > #endregion >> > #region Constructor >> > public Contact() >> > { } >> > public Contact(string lastName, string firstName, string email) >> > { >> > this.LastName = lastName; >> > this.FirstName = firstName; >> > this.Email = email; >> > } >> > #endregion >> > } >> > } >> > using System; >> > using System.Collections.Generic; >> > using System.Linq; >> > using System.Text; >> > namespace Ordering.Data >> > { >> > public class Address >> > { >> > #region Attributes and Properties >> > private int _ID; >> > private string _address1; >> > private string _address2; >> > private string _city; >> > private string _zipCode; >> > private Contact _addressContact; >> > private IList<OrderHeader> billToAddress; >> > private IList<OrderHeader> shipToAddress; >> > public virtual IList<OrderHeader> ShipToAddress >> > { >> > get { return shipToAddress; } >> > set { shipToAddress = value; } >> > } >> > public virtual IList<OrderHeader> BillToAddress >> > { >> > get { return billToAddress; } >> > set { billToAddress = value; } >> > } >> > public virtual Contact AddressContact >> > { >> > get { return _addressContact; } >> > set { _addressContact = value; } >> > } >> > public virtual string ZipCode >> > { >> > get { return _zipCode; } >> > set { _zipCode = value; } >> > } >> > public virtual string City >> > { >> > get { return _city; } >> > set { _city = value; } >> > } >> > public virtual string Address2 >> > { >> > get { return _address2; } >> > set { _address2 = value; } >> > } >> > public virtual string Address1 >> > { >> > get { return _address1; } >> > set { _address1 = value; } >> > } >> > >> > public virtual int ID >> > { >> > get { return _ID; } >> > set { _ID = value; } >> > } >> > #endregion >> > >> > #region Constructors >> > public Address() >> > { } >> > /// <summary> >> > /// >> > /// </summary> >> > /// <param name="address1"></param> >> > /// <param name="address2"></param> >> > /// <param name="city"></param> >> > /// <param name="zipCode"></param> >> > public Address(string address1, >> > string address2, >> > string city, >> > string zipCode) >> > : this() >> > { >> > this.Address1 = address1; >> > this.Address2 = address2; >> > this.City = city; >> > this.ZipCode = zipCode; >> > } >> > #endregion >> > } >> > } >> > using System; >> > using System.Collections.Generic; >> > using System.Linq; >> > using System.Text; >> > namespace Ordering.Data >> > { >> > public class OrderHeader >> > { >> > #region Properties and Attributes >> > private int _ID; >> > private string _number; >> > private DateTime _orderDate; >> > private int _itemQty; >> > private decimal _total; >> > private Contact _billToContact; >> > private Contact _shipToContact; >> > private Address _billToAddress; >> > private Address _shipToAddress; >> > private IList<OrderItem> _headerItems; >> > public virtual IList<OrderItem> HeaderItems >> > { >> > get { return _headerItems; } >> > set { _headerItems = value; } >> > } >> > >> > public virtual DateTime OrderDate >> > { >> > get { return _orderDate; } >> > set { _orderDate = value; } >> > } >> > >> > public virtual Address ShipToAddress >> > { >> > get { return _shipToAddress; } >> > set { _shipToAddress = value; } >> > } >> > public virtual Address BillToAddress >> > { >> > get { return _billToAddress; } >> > set { _billToAddress = value; } >> > } >> > public virtual Contact ShipToContact >> > { >> > get { return _shipToContact; } >> > set { _shipToContact = value; } >> > } >> > public virtual Contact BillToContact >> > { >> > get { return _billToContact; } >> > set { _billToContact = value; } >> > } >> > public virtual decimal Total >> > { >> > get { return _total; } >> > set { _total = value; } >> > } >> > public virtual int ItemQty >> > { >> > get { return _itemQty; } >> > set { _itemQty = value; } >> > } >> > public virtual string Number >> > { >> > get { return _number; } >> > set { _number = value; } >> > } >> > public virtual int ID >> > { >> > get { return _ID; } >> > set { _ID = value; } >> > } >> > #endregion >> > #region Constructors >> > public OrderHeader() >> > { } >> > public OrderHeader(string number, DateTime orderDate, int >> > itemQty, >> > decimal total, >> > Contact billToContact, Contact >> > shipToContact, >> > Address billToAddress, >> > Address shipToAddress) >> > { >> > this.Number = number; >> > this.OrderDate = orderDate; >> > this.ItemQty = itemQty; >> > this.Total = total; >> > this.BillToContact = billToContact; >> > this.ShipToContact = shipToContact; >> > this.BillToAddress = billToAddress; >> > this.ShipToAddress = shipToAddress; >> > } >> > #endregion >> > } >> > } >> > (Filename: Contact.hbm.xml) >> > <?xml version="1.0" encoding="utf-8" ?> >> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" >> > namespace="Ordering.Data" >> > assembly="Ordering.Data"> >> > <class name="Ordering.Data.Contact, Ordering.Data" >> > table="Contact"> >> > <id name="ID"> >> > <column name="ID" sql-type="int"/> >> > <generator class="native"/> >> > </id> >> > <property name="LastName" type="String"/> >> > <property name="FirstName" type="String"/> >> > <property name="Email" type="String"/> >> > >> > <!--Many to Many Relationship--> >> > >> > >> > <!--One to Many Relationship--> >> > <bag name="BillToContacts" inverse="true" >> > lazy="true" cascade="all-delete-orphan"> >> > <key column="BillToContact_ID"/> >> > <one-to-many class="OrderHeader"/> >> > </bag> >> > <bag name="ShipToContacts" inverse="true" >> > lazy="true" cascade="all-delete-orphan"> >> > <key column="ShipToContact_ID"/> >> > <one-to-many class="OrderHeader"/> >> > </bag> >> > <bag name="ContactAddress" inverse="true" >> > lazy="true" cascade="all-delete-orphan"> >> > <key column="Contact_ID"/> >> > <one-to-many class="Address"/> >> > </bag> >> > <bag name="ContactPhone" table="Contact_Phone" inverse="false" >> > lazy="true" cascade="none"> >> > <key> >> > <column name="Contact_ID" length="4" sql-type="Int32" >> > not-null="true"/> >> > </key> >> > >> > <many-to-many class="Phone"> >> > <column name="Phone_ID" length="4" sql-type="Int32" >> > not-null="true"/> >> > </many-to-many> >> > </bag> >> > </class> >> > </hibernate-mapping> >> > (Filename: Address.hbm.xml) >> > <?xml version="1.0" encoding="utf-8" ?> >> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" >> > namespace="Ordering.Data" >> > assembly="Ordering.Data"> >> > <class name="Ordering.Data.Address, Ordering.Data" >> > table="Address"> >> > <id name="ID"> >> > <column name="ID" sql-type="Int32"/> >> > <generator class="native"/> >> > </id> >> > <property name="Address1" type="String" not-null="true"/> >> > <property name="Address2" type="String" not-null="false"/> >> > <property name="City" type="String" not-null="true"/> >> > <property name="ZipCode" type="String" not-null="false"/> >> > <!--Many to One relationship--> >> > <many-to-one name="AddressContact" class="Contact"> >> > <column name="Contact_ID" length="4" sql-type="Int32"/> >> > </many-to-one> >> > >> > <!--One to Many relationship--> >> > <bag name="BillToAddress" inverse="true" >> > lazy="true" cascade="all-delete-orphan"> >> > <key column="BillToAddress_ID"/> >> > <one-to-many class="Address"/> >> > </bag> >> > <bag name="ShipToAddress" inverse="true" >> > lazy="true" cascade="all-delete-orphan"> >> > <key column="ShipToAddress_ID"/> >> > <one-to-many class="Address"/> >> > </bag> >> > </class> >> > </hibernate-mapping> >> > (Filename: OrderHeader.hbm.xml) >> > <?xml version="1.0" encoding="utf-8" ?> >> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" >> > namespace="Ordering.Data" >> > assembly="Ordering.Data"> >> > <class name="Ordering.Data.OrderHeader, Ordering.Data" >> > table="OrderHeader"> >> > <id name="ID"> >> > <column name="ID" sql-type="Int32"/> >> > <generator class="native"/> >> > </id> >> > <property name="Number" type="String"/> >> > <property name="OrderDate" type="DateTime"/> >> > <property name="ItemQty" type="Int32"/> >> > <property name="Total" type="Decimal"/> >> > <!--Many to One relationship--> >> > <many-to-one name="BillToContact" class="Contact"> >> > <column name="BillToContact_ID" length="4" sql-type="Int32"/> >> > </many-to-one> >> > <many-to-one name="ShipToContact" class="Contact"> >> > <column name="ShipToContact_ID" length="4" sql-type="Int32"/> >> > </many-to-one> >> > <many-to-one name="BillToAddress" class="Contact"> >> > <column name="BillToAddress_ID" length="4" sql-type="Int32"/> >> > </many-to-one> >> > <many-to-one name="ShipToAddress" class="Contact"> >> > <column name="ShipToAddress_ID" length="4" sql-type="Int32"/> >> > </many-to-one> >> > <!--One to Many relationship--> >> > <bag name="HeaderItems" inverse="true" >> > lazy="true" cascade="all-delete-orphan"> >> > <key column="OrderHeader_ID"/> >> > <one-to-many class="OrderItem"/> >> > </bag> >> > >> > </class> >> > </hibernate-mapping> >> > Please help me. I'm really at a dead end on this. >> > >> > -- >> > You received this message because you are subscribed to the Google >> > Groups >> > "nhusers" group. >> > To post to this group, send email to [email protected]. >> > To unsubscribe from this group, send email to >> > [email protected]. >> > For more options, visit this group at >> > http://groups.google.com/group/nhusers?hl=en. >> > >> >> -- >> You received this message because you are subscribed to the Google Groups >> "nhusers" group. >> To post to this group, send email to [email protected]. >> To unsubscribe from this group, send email to >> [email protected]. >> For more options, visit this group at >> http://groups.google.com/group/nhusers?hl=en. >> > > -- > You received this message because you are subscribed to the Google Groups > "nhusers" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/nhusers?hl=en. > -- You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.
