Carl
unread,Feb 3, 2011, 3:51:22 PM2/3/11Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Sign in to report message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to nhusers
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