Only one of the available examples in the cloud
http://fabiomaulo.blogspot.com/2009/10/nhibernate-wcf-session-per-call-in.html

On Thu, Feb 3, 2011 at 5:57 PM, Fabio Maulo <[email protected]> wrote:

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


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

Reply via email to