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
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to