Note that there are some explanatory texts on larger screens.

plurals
  1. PONHibernate Error Message: object references an unsaved transient instance - save the transient instance before flushing
    primarykey
    data
    text
    <p>I'm using nHibernate and trying to add some master-detail data. The database diagram is attached here. <img src="https://i.stack.imgur.com/82cl8.png" alt="Database diagram"></p> <p>The following is the code for adding a category along with two products:</p> <pre><code>//Category namespace Sample.CustomerService.Domain { public class Category { public Category() { Products = new List&lt;Product&gt;(); } public virtual int CategoryID { get; set; } public virtual IList&lt;Product&gt; Products { get; set; } public virtual string Name { get; set; } public virtual string Unit { get; set; } public virtual void AddProduct(Product product) { Products.Add(product); } } } //CategoryMap namespace Sample.CustomerService.Domain { public class CategoryMap : ClassMap&lt;Category&gt; { public CategoryMap() { Table("Category"); LazyLoad(); Id(x =&gt; x.CategoryID).GeneratedBy.Identity().Column("CategoryID"); Map(x =&gt; x.Name).Column("Name").Not.Nullable().Length(50); Map(x =&gt; x.Unit).Column("Unit").Not.Nullable().Length(3); HasMany(x =&gt; x.Products).KeyColumn("CategoryID"); } } } //-------------------------------------------------------------------------------------------- //Product namespace Sample.CustomerService.Domain { public class Product { public Product() { } public virtual int ProductID { get; set; } public virtual Category Category { get; set; } public virtual string Name { get; set; } public virtual decimal UnitPrice { get; set; } } } //ProductMap namespace Sample.CustomerService.Domain { public class ProductMap : ClassMap&lt;Product&gt; { public ProductMap() { Table("Product"); LazyLoad(); Id(x =&gt; x.ProductID).GeneratedBy.Identity().Column("ProductID"); References(x =&gt; x.Category).Column("CategoryID"); Map(x =&gt; x.Name).Column("Name").Not.Nullable().Length(50); Map(x =&gt; x.UnitPrice).Column("UnitPrice").Not.Nullable(); } } } //---------------------------------------------------------------------------------------------- //Program namespace WindowsHibernateTest { public partial class TestClass : Form { public TestClass() { InitializeComponent(); CreateNewProduct(); } public void CreateNewProduct() { try { var sessionFactory = CreateSessionFactory(); using (var session = sessionFactory.OpenSession()) { using (var sqlTrans = session.BeginTransaction()) { Category newGold = new Category() { Name = "Gold", Unit = "GRM" }; Product ngOrn = new Product() { Name = "Bangles", UnitPrice = 1000.10M }; Product ogOrn = new Product() { Name = "Rings", UnitPrice = 2000.10M }; AddProductsToCategory(newGold, ngOrn, ogOrn); session.SaveOrUpdate(newGold); sqlTrans.Commit(); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private static ISessionFactory CreateSessionFactory() { return Fluently.Configure().Database(MsSqlConfiguration.MsSql2005. ConnectionString("Data Source=MyDB; Initial Catalog=NHibernateTest; Trusted_Connection=true;")).Mappings(m =&gt; m.FluentMappings.AddFromAssemblyOf&lt;Program&gt;()).BuildSessionFactory(); } public static void AddProductsToCategory(Category category, params Product[] products) { foreach (var product in products) { category.AddProduct(product); } } } } </code></pre> <p>In the line <code>sqlTrans.Commit()</code>, I'm getting the following error: </p> <blockquote> <p>object references an unsaved transient instance - save the transient instance before flushing. Type: Sample.CustomerService.Domain.Product, Entity: Sample.CustomerService.Domain.Product</p> </blockquote> <p>I've Googled for quite sometime and didn't get convincing solutions for this. I've tried <a href="https://stackoverflow.com/questions/2302802/object-references-an-unsaved-transient-instance-save-the-transient-instance-be">this</a>, <a href="https://stackoverflow.com/questions/3144402/nhibernate-object-references-an-unsaved-transient-instance-save-the-transien">this</a> and <a href="https://stackoverflow.com/questions/6596289/object-references-an-unsaved-transient-instance-save-the-transient-instance-befo">this</a>, but could not able to resolve this error. Please help me to resolve this error. Thanks in advance.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload