Show us your User mapping. Also, how do you load the User you are trying to update? When you say user.Name = txtName.Text, where did that instance of user come from?
On Dec 2, 10:41 pm, senzacionale <[email protected]> wrote: > Hi, > > When i am inserting into DB everything works, but when i update i get > error of "Illegal attempt to associate a collection with two open > sessions". I use transaction, but if i do not have for example > userDao.CommitChanges(); nothing is stored to DB, but if i use > userDao.CommitChanges(); then i get previous error. I search in forum, > google try many things but no one works. Problem is that in VS 2008 > update works, in IIS i get this problem. > > Looks like session lifetime management problem and not with mapping. > > When i debug in IIS i get this > > problem is in this code > > Code: > public void CommitChanges() { > if (NHibernateSessionManager.Instance.HasOpenTransactionOn > (SessionFactoryConfigPath)) { > NHibernateSessionManager.Instance.CommitTransactionOn > (SessionFactoryConfigPath); > } > else { > // If there's no transaction, just flush the changes > NHibernateSessionManager.Instance.GetSessionFrom > (SessionFactoryConfigPath).Flush(); > } > } > > public void CommitTransactionOn(string sessionFactoryConfigPath) { > ITransaction transaction = (ITransaction) > ContextTransactions[sessionFactoryConfigPath]; > > try { > if (HasOpenTransactionOn(sessionFactoryConfigPath)) { > transaction.Commit(); > ContextTransactions.Remove > (sessionFactoryConfigPath); > } > } > catch (HibernateException) { > RollbackTransactionOn(sessionFactoryConfigPath); > throw; > } > } > > public bool HasOpenTransactionOn(string > sessionFactoryConfigPath) { > ITransaction transaction = (ITransaction) > ContextTransactions[sessionFactoryConfigPath]; > > return transaction != null && !transaction.WasCommitted > && !transaction.WasRolledBack; > } > > always is calling else statement in CommitChanges() method. When i > update never gone to commitchanges(). > > Fluent NHibernate version: > 1:0 RTM > > Code for update > > Code: > user.Name = txtName.Text; > user.Surname = txtSurname.Text; > user.HealthCardId = txtHealthCardId.Text; > user.Address = address; > userDao.Update(user); > userDao.CommitChanges(); > > Code: > public T Update(T entity) > { > NHibernateSession.Update(entity); > return entity; > } > > Name and version of the database you are using: > MSSQL 2008 > > Full stack trace of any exception that occurs: > > Quote: > Server Error in '/' Application. > Illegal attempt to associate a collection with two open sessions > Description: An unhandled exception occurred during the execution of > the current web request. Please review the stack trace for more > information about the error and where it originated in the code. > > Exception Details: NHibernate.HibernateException: Illegal attempt to > associate a collection with two open sessions > > Source Error: > > An unhandled exception was generated during the execution of the > current web request. Information regarding the origin and location of > the exception can be identified using the exception stack trace below. > > Stack Trace: > > [HibernateException: Illegal attempt to associate a collection with > two open sessions] > NHibernate.Collection.AbstractPersistentCollection.SetCurrentSession > (ISessionImplementor session) +237 > > NHibernate.Event.Default.OnUpdateVisitor.ProcessCollection(Object > collection, CollectionType type) +184 > NHibernate.Event.Default.AbstractVisitor.ProcessValue(Int32 i, Object > [] values, IType[] types) +46 > NHibernate.Event.Default.AbstractVisitor.ProcessEntityPropertyValues > (Object[] values, IType[] types) +74 > > NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.PerformUpdate > (SaveOrUpdateEvent event, Object entity, IEntityPersister persister) > +432 > NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.PerformSaveOrUpdate > (SaveOrUpdateEvent event) +99 > > NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate > (SaveOrUpdateEvent event) +333 > NHibernate.Impl.SessionImpl.FireSaveOrUpdate(SaveOrUpdateEvent event) > +162 > NHibernate.Impl.SessionImpl.SaveOrUpdate(String entityName, Object > obj) +151 > > NHibernate.Engine.SaveUpdateCascadingAction.Cascade(IEventSource > session, Object child, String entityName, Object anything, Boolean > isCascadeDeleteEnabled) +139 > NHibernate.Engine.Cascade.CascadeOn(IEntityPersister persister, Object > parent, Object anything) +578 > > NHibernate.Event.Default.AbstractFlushingEventListener.CascadeOnFlush > (IEventSource session, IEntityPersister persister, Object key, Object > anything) +145 > NHibernate.Event.Default.AbstractFlushingEventListener.PrepareEntityFlushes > (IEventSource session) +387 > > NHibernate.Event.Default.AbstractFlushingEventListener.FlushEverythingToExecutions > (FlushEvent event) +292 > NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent > event) +85 > NHibernate.Impl.SessionImpl.Flush() +275 > > ProjectBase.Data.AbstractNHibernateDao`2.CommitChanges() in D: > \PROJEKTI > \eMedicine\ProjectBase.Data\AbstractNHibernateDao.cs:120 > EMedicine.UserControls.UsersUC.btnAdd_Update(Object sender, EventArgs > e) in D:\PROJEKTI\eMedicine\eMedicine\UserControls\UsersUC.ascx.cs:390 > > System.Web.UI.WebControls.Button.OnClick(EventArgs e) +115 > System.Web.UI.WebControls.Button.RaisePostBackEvent(String > eventArgument) +140 > System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler > sourceControl, String eventArgument) +29 > > System.Web.UI.Page.ProcessRequestMain(Boolean > includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) > +2981 > > Any idea what can be wrong? -- 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.
