I think he means you only need to reset the session, and shouldn't need to reset the session factory.
On Fri, Apr 3, 2009 at 11:31 AM, joshlrogers <[email protected]> wrote: > > I don't mean to be dense, but what do you mean? > > On Apr 3, 11:29 am, Fabio Maulo <[email protected]> wrote: >> Is enough with session. >> >> 2009/4/3 joshlrogers <[email protected]> >> >> >> >> >> >> > Disregard please. I have resolved this issue. >> >> > For others who may run into this there seems to be an issue that when >> > an exception occurs in the session you can not continue with that >> > session. I resolved by implementing a reset session method whenever >> > an exception is caught. This reset session method disposes of both >> > the session and the factory and reinitializes them. >> >> > private void ResetSession() >> > { >> > session.Dispose(); >> > sessionFactory.Dispose(); >> >> > sessionFactory = (new Configuration().Configure >> > ().BuildSessionFactory()); >> > session = sessionFactory.OpenSession(); >> > } >> >> > This allowed subsequent calls to session to work properly. >> >> > Thanks, >> > Josh >> >> > On Apr 3, 10:28 am, joshlrogers <[email protected]> wrote: >> > > I am writing tests for my logic layer and I am running into an issue >> > > that I have no idea how to debug and I can't find much guidance on the >> > > intertubes. Here is my output from MbUnit. >> >> > > ============ >> >> > > NHibernate: SELECT cwtratingg0_.Id as Id17_0_, cwtratingg0_.Name as >> > > Name17_0_, cwtratingg0_.UserAdded as UserAdded17_0_, >> > > cwtratingg0_.DateAdded as DateAdded17_0_, cwtratingg0_.UserEdited as >> > > UserEdited17_0_, cwtratingg0_.DateEdited as DateEdited17_0_ FROM >> > > dbo.tblCWTRatingGroups cwtratingg0_ WHERE cwtratingg0_....@p0; @p0 = >> > > '100' >> >> > > NHibernate.AssertionFailure: null id in TEAMS_ORM.CWTRatingGroup entry >> > > (don't flush the Session after an exception occurs) >> > > at NHibernate.Event.Default.DefaultFlushEntityEventListener.CheckId >> > > (Object obj, IEntityPersister persister, Object id, EntityMode >> > > entityMode) >> > > at >> > > NHibernate.Event.Default.DefaultFlushEntityEventListener.GetValues >> > > (Object entity, EntityEntry entry, EntityMode entityMode, Boolean >> > > mightBeDirty, ISessionImplementor session) >> > > at >> > > NHibernate.Event.Default.DefaultFlushEntityEventListener.OnFlushEntity >> > > (FlushEntityEvent event) >> > > at >> > > NHibernate.Event.Default.AbstractFlushingEventListener.FlushEntities >> > > (FlushEvent event) >> > > at >> >> > NHibernate.Event.Default.AbstractFlushingEventListener.FlushEverythingToExecutions >> > > (FlushEvent event) >> > > at NHibernate.Event.Default.DefaultFlushEventListener.OnFlush >> > > (FlushEvent event) >> > > at NHibernate.Impl.SessionImpl.Flush() >> > > at TEAMSData.DataLayer.NHibernateDataProvider.ModifyCWTRatingGroup >> > > (CWTRatingGroup ratingGroup) in C:\Source\TEAMS\TEAMS\TEAMSData >> > > \DataLayer\NHibernateDataProvider.cs:line 87 >> > > at TEAMSLogic.CWTRatingLogic.ModifyCWTRatingGroup(String name, >> > > Int32 ratingGroupId, Int32 userEditedId) in C:\Source\TEAMS\TEAMS >> > > \TEAMSLogic\CWTRatingLogic.cs:line 35 >> > > at TEAMSDataUnitTests.CWTRatingLogicTests.CanModifyCWTRatingGroup() >> > > in C:\Source\TEAMS\TEAMS\TEAMSUnitTests\CWTRatingLogicTests.cs:line 44 >> >> > > ============ >> >> > > Here is my unit test: >> >> > > ============ >> >> > > [Test] >> > > [DependsOn(typeof(CWTRatingGroupTests), >> > > "CanGetCWTRatingGroupByName")] >> > > [DependsOn("CanAddCWTRatingGroup")] >> > > public void CanModifyCWTRatingGroup() >> > > { >> > > string newGroupName = "Logic Modified Group"; >> >> > > CWTRatingGroup ratingGroup = >> > > _Provider.GetCWTRatingGroupById(100); >> >> > > _RatingLogic.ModifyCWTRatingGroup(newGroupName, >> > > ratingGroup.Id, 1); >> >> > > ratingGroup = _Provider.GetCWTRatingGroupByName >> > > (newGroupName); >> >> > > Assert.IsNotNull(ratingGroup); >> > > Assert.AreEqual(1, ratingGroup.UserEdited.Id); >> >> > > } >> >> > > =========== >> >> > > Here is my logic code: >> >> > > =========== >> >> > > public void ModifyCWTRatingGroup(string name, int >> > > ratingGroupId, int userEditedId) >> > > { >> > > CWTRatingGroup ratingGroup = provider.GetCWTRatingGroupById >> > > (ratingGroupId); >> >> > > ratingGroup.Name = name; >> > > ratingGroup.UserEdited = provider.GetUserById >> > > (userEditedId); >> >> > > provider.ModifyCWTRatingGroup(ratingGroup); >> > > } >> >> > > =========== >> >> > > Finally my data layer >> >> > > =========== >> >> > > public void ModifyCWTRatingGroup(CWTRatingGroup ratingGroup) >> > > { >> > > if (ratingGroup.UserEdited == null) >> > > throw new ArgumentException("UserEdited may not be >> > > null"); >> >> > > try >> > > { >> > > ratingGroup.DateEdited = DateTime.Now; >> >> > > session.Transaction.Begin(); >> >> > > session.Update(ratingGroup); >> > > session.Flush(); >> >> > > session.Transaction.Commit(); >> > > } >> > > catch (Exception) >> > > { >> > > session.Transaction.Rollback(); >> > > throw; >> > > } >> >> > > } >> >> > > ========== >> >> > > I have stepped through this and everything looks kosher. ratingGroup >> > > in the DAL has all the required fields populated with valid values. >> > > It's Id is definitely populated and is not null. The exception is >> > > thrown when Flush() is called. >> >> > > I hope someone has an idea because this code works in another test it >> > > was when I added the logic layer in the middle that this code began to >> > > throw an exception. >> >> > > Thank you in advance, >> > > Josh Rogers >> >> -- >> Fabio Maulo > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
