even if you are setting "current_session_context_class" then you are not using it in your code. Btw the error seems not to be related with session management. The "NHibernate.StaleStateException: Unexpected row count: 0; expected: 1" is when: - you are updating an entity and it was deleted - you are deleting an entity and it was already deleted - you are updating a versioned entity and it was updated by another call - ... and so on
On Thu, Feb 3, 2011 at 5:51 PM, Carl <[email protected]> wrote: > Hello there, > > We are having intermittent problems with a windows service running > over WCF (single instance) with NHibernate. > > We are getting occasional errors that are causing our service to fail: > > 11:35:27.023 [26] ERROR > NHibernate.Event.Default.AbstractFlushingEventListener - Could not > synchronize database state with session > NHibernate.StaleStateException: Unexpected row count: 0; expected: 1 > at > > NHibernate.AdoNet.Expectations.BasicExpectation.VerifyOutcomeNonBatched(Int32 > rowCount, IDbCommand statement) > at NHibernate.AdoNet.NonBatchingBatcher.AddToBatch(IExpectation > expectation) > at NHibernate.Persister.Entity.AbstractEntityPersister.Delete(Object > id, Object version, Int32 j, Object obj, SqlCommandInfo sql, > ISessionImplementor session, Object[] loadedState) > at NHibernate.Persister.Entity.AbstractEntityPersister.Delete(Object > id, Object version, Object obj, ISessionImplementor session) > at NHibernate.Action.EntityDeleteAction.Execute() > at NHibernate.Engine.ActionQueue.Execute(IExecutable executable) > at NHibernate.Engine.ActionQueue.ExecuteActions(IList list) > at > > NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource > session) > 12:44:13.357 [38] ERROR NHibernate.Transaction.AdoTransaction - Commit > failed > System.Data.SqlClient.SqlException: The COMMIT TRANSACTION request has > no corresponding BEGIN TRANSACTION. > at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException > exception, Boolean breakConnection) > at > > System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject > stateObj) > at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, > SqlCommand cmdHandler, SqlDataReader dataStream, > BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject > stateObj) > at > System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] > buffer, TransactionManagerRequestType request, String transactionName, > TransactionManagerIsolationLevel isoLevel, Int32 timeout, > SqlInternalTransaction transaction, TdsParserStateObject stateObj, > Boolean isDelegateControlRequest) > at > > System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest > transactionRequest, String transactionName, IsolationLevel iso, > SqlInternalTransaction internalTransaction, Boolean > isDelegateControlRequest) > at System.Data.SqlClient.SqlInternalTransaction.Commit() > at System.Data.SqlClient.SqlTransaction.Commit() > at NHibernate.Transaction.AdoTransaction.Commit() > > and > > NHibernate.HibernateException: disconnected session > at > NHibernate.Collection.AbstractPersistentCollection.ForceInitialization() > at > NHibernate.Engine.StatefulPersistenceContext.InitializeNonLazyCollections() > at > > NHibernate.Event.Default.DefaultLoadEventListener.AssembleCacheEntry(CacheEntry > entry, Object id, IEntityPersister persister, LoadEvent event) > at > > NHibernate.Event.Default.DefaultLoadEventListener.LoadFromSecondLevelCache(LoadEvent > event, IEntityPersister persister, LoadType options) > at NHibernate.Event.Default.DefaultLoadEventListener.DoLoad(LoadEvent > event, IEntityPersister persister, EntityKey keyToLoad, LoadType > options) > at NHibernate.Event.Default.DefaultLoadEventListener.Load(LoadEvent > event, IEntityPersister persister, EntityKey keyToLoad, LoadType > options) > at NHibernate.Event.Default.DefaultLoadEventListener.OnLoad(LoadEvent > event, LoadType loadType) > at NHibernate.Impl.SessionImpl.FireLoad(LoadEvent event, LoadType > loadType) > at NHibernate.Impl.SessionImpl.InternalLoad(String entityName, Object > id, Boolean eager, Boolean isNullable) > at NHibernate.Type.EntityType.ResolveIdentifier(Object id, > ISessionImplementor session) > at NHibernate.Type.TypeFactory.Assemble(Object[] row, > ICacheAssembler[] types, ISessionImplementor session, Object owner) > at NHibernate.Cache.Entry.CacheEntry.Assemble(Object[] values, Object > result, Object id, IEntityPersister persister, IInterceptor > interceptor, ISessionImplementor session) > at > > NHibernate.Event.Default.DefaultLoadEventListener.AssembleCacheEntry(CacheEntry > entry, Object id, IEntityPersister persister, LoadEvent event) > at > > NHibernate.Event.Default.DefaultLoadEventListener.LoadFromSecondLevelCache(LoadEvent > event, IEntityPersister persister, LoadType options) > at NHibernate.Event.Default.DefaultLoadEventListener.DoLoad(LoadEvent > event, IEntityPersister persister, EntityKey keyToLoad, LoadType > options) > at NHibernate.Event.Default.DefaultLoadEventListener.Load(LoadEvent > event, IEntityPersister persister, EntityKey keyToLoad, LoadType > options) > at NHibernate.Event.Default.DefaultLoadEventListener.OnLoad(LoadEvent > event, LoadType loadType) > at NHibernate.Impl.SessionImpl.FireLoad(LoadEvent event, LoadType > loadType) > at NHibernate.Impl.SessionImpl.Get(Type clazz, Object id, LockMode > lockMode) > at X.X.DomainData.Implementation.CoreDao.GetEntity[T](Object id) > at X.X.DomainData.Implementation.UserDao.GetThing(Int32 engineerId) > at > X.X.CaseManagement.Implementation.Managers.UserManager.GetThing(Int32 > engineerID) > > Here is our session manager: > > Code: > using System; > using NHibernate; > using NHibernate.Cfg; > > namespace X.X.DomainData.Implementation > { > public sealed class SessionManager > { > [ThreadStatic] private static ISession _session; > private readonly Configuration _configuration; > private readonly ISessionFactory _sessionFactory; > > #region Constructor > > #region Singleton > > public static SessionManager Instance > { > get { return Singleton.Instance; } > } > > private class Singleton > { > internal static readonly SessionManager Instance = new > SessionManager(); > } > > #endregion > > private SessionManager() > { > _configuration = new Configuration(); > Configuration.Configure(); > > Configuration.AddAssembly(GetType().Assembly); > Configuration.Properties.Add("prevalenceBase", "cmm- > cache"); > > //get the session factory > _sessionFactory = Configuration.BuildSessionFactory(); > } > > #endregion > > #region NHibernate Setup > > public Configuration Configuration > { > get { return _configuration; } > } > > > internal ISessionFactory SessionFactory > { > get { return _sessionFactory; } > } > public void Close() > { > SessionFactory.Close(); > } > > #endregion > > #region NHibernate Sessions > > public ISession Session > { > get > { > ISession session = _session; > > //if it's an open session, that's all > if (session != null && session.IsOpen) > return session; > > //if not open, open a new session > return OpenSession(); > } > } > > public ISession OpenSession() > { > ISession session = SessionFactory.OpenSession(); > _session = session; > return session; > } > > #endregion > } > } > > > We are using this property: > > <property name="current_session_context_class">thread_static</ > property> > > Can anybody explain what causes this error, why it causes the service > to freeze and how we can get around it? > > Many thanks in anticipation, > > Carl > > -- > 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]<nhusers%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/nhusers?hl=en. > > -- 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.
