How do I save a transient object that already exists in an NHibernate session?
c#, castle-activerecord, nhibernate, persistence, session-state
Solution
Instead of trying to merge the transient instance. Why not start with the actual instance...simply get the product by id, update the fields, and commit.
var product = session.Get<Product>(2);
product.Name = "Mandarin Oranges";
tx.Commit();
or the merge way...
var product = new Product{ Id = 2, Name = "Mandarin Oranges" };
var mergedProduct = (Product) session.Merge(product);
tx.Commit();
Problem
I have a `Store` that contains a list of `Products`: ``` var store = new Store(); store.Products.Add(new Product{ Id = 1, Name = "Apples" }; store.Products.Add(new Product{ Id = 2, Name = "Oranges" }; Database.Save(store); ``` Now, I want to edit one of the `Products`, but with a transient entity. This will be, for example, data from a web browser: ``` // this is what I get from the web browser, this product should // edit the one that's already in the database that has the same Id var product = new Product{ Id = 2, Name = "Mandarin Oranges" }; store.Products.Add(product); Database.Save(store); ``` However, trying to do it this way gives me an error: a different object with the same identifier value was already associated with the session The reason is because the `store.Products` collection already contains an entity with the same Id. How do I get around this problem?