(I'm sending my post again because the previous one was not showing after
some days)
Hello everyone,
I'm making a test method for an application and I'm having trouble getting
it to work correctly.
In my model, one Case has many Specimen (but one Specimen is associated
with only one Case).
I'm trying to add one Case with some Specimens to the database and then
removing the Specimens (but not deleting the Case), but somehow I get
StaleStateException and I can't figure why.
Case.Specimens is mapped as a One to many collection with inverse="false"
and cascade="all-delete-orphan". The relationship is bidirectional (i.e.
each Specimen has a reference to the Case), though I don't think that's
relevant.
using (var session =
DatabaseSetUpFixture.SessionFactory.OpenSession())
using (var tx = session.BeginTransaction())
{
Case original = AddSampleCase(session);
original.Specimens = new List<Specimen>() {
CreateSampleSpecimen()
};
session.Flush(); // Save the changes
session.Clear(); // Evict all entities from the session
Case newVersion = session.Get<Case>(original.Id); // Get
the DB version
newVersion.Specimens.Clear(); // Remove all the specimens
session.Update(newVersion);
session.Flush(); // StaleStateException here :S
// ...
tx.Rollback(); // Leave the test DB untouched
}
}
I need to use the same session so I can rollback all the changes made (as
this is a test method).
If I comment "newVersion.Specimens.Clear();" the test ends normally (but I
need that line, of course), and I don't understand why (even if I change
some attributes of the Case)
The stack trace is included below:
en
NHibernate.AdoNet.Expectations.BasicExpectation.VerifyOutcomeNonBatched(Int32
rowCount, IDbCommand statement) en
p:\nhibernate-core\src\NHibernate\AdoNet\Expectations.cs:línea 29
en NHibernate.AdoNet.NonBatchingBatcher.AddToBatch(IExpectation
expectation) en
p:\nhibernate-core\src\NHibernate\AdoNet\NonBatchingBatcher.cs:línea 41
en NHibernate.Persister.Entity.AbstractEntityPersister.Delete(Object id,
Object version, Int32 j, Object obj, SqlCommandInfo sql,
ISessionImplementor session, Object[] loadedState) en
p:\nhibernate-core\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs:línea
2919
en NHibernate.Persister.Entity.AbstractEntityPersister.Delete(Object id,
Object version, Object obj, ISessionImplementor session) en
p:\nhibernate-core\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs:línea
3102
en NHibernate.Action.EntityDeleteAction.Execute() en
p:\nhibernate-core\src\NHibernate\Action\EntityDeleteAction.cs:línea 70
en NHibernate.Engine.ActionQueue.Execute(IExecutable executable) en
p:\nhibernate-core\src\NHibernate\Engine\ActionQueue.cs:línea 136
en NHibernate.Engine.ActionQueue.ExecuteActions(IList list) en
p:\nhibernate-core\src\NHibernate\Engine\ActionQueue.cs:línea 126
en NHibernate.Engine.ActionQueue.ExecuteActions() en
p:\nhibernate-core\src\NHibernate\Engine\ActionQueue.cs:línea 174
en
NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource
session) en
p:\nhibernate-core\src\NHibernate\Event\Default\AbstractFlushingEventListener.cs:línea
249
en NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent
event) en
p:\nhibernate-core\src\NHibernate\Event\Default\DefaultFlushEventListener.cs:línea
19
en NHibernate.Impl.SessionImpl.Flush() en
p:\nhibernate-core\src\NHibernate\Impl\SessionImpl.cs:línea 1509
So, what is causing StaleStateException?
Thank you very much
--
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/groups/opt_out.