Hibernate version: NHibernate
Mapping documents:
TimeSpan:
Code:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
<class
name="Cyberline.WorkLogger.Model.TimeSpan, Cyberline.WorkLogger.Model"
table="TimeSpans"
optimistic-lock="version">
<id name="Id" column="Id">
<generator class="increment" />
</id>
<property name="Starttime" type="DateTime"/>
<property name="Endtime" type="DateTime" />
<many-to-one foreign-key="int" name="Action" not-null="true"></many-to-one>
</class>
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():Code:
public void EditTimeSpan(Cyberline.WorkLogger.Model.TimeSpan oldTs, DateTime start, DateTime end, Action act)
{
ISession session = PersistenceLogic.Instance.GetNewSession();
try
{
if (session.CreateCriteria(typeof(Cyberline.WorkLogger.Model.TimeSpan))
.Add(Expression.Eq("Id", oldTs.Id.ToString()))
.List()
.Count < 0)
{
throw new ArgumentException(String.Format("Cannot find the timespan with the Id '{0}'.", oldTs.Id.ToString(), "Id"));
}
else
{
oldTs.Endtime = end;
oldTs.Starttime = start;
oldTs.Action = act;
session.Update(oldTs);
session.Flush();
}
}
catch
{
}
finally
{
session.Close();
}
}
Full stack trace of any exception that occurs:
a different object with the same identifier value was already associated with the session: 8, of class: Cyberline.WorkLogger.Model.TimeSpan
bei NHibernate.Impl.SessionImpl.CheckUniqueness(Key key, Object obj)
bei NHibernate.Impl.SessionImpl.DoUpdateMutable(Object obj, Object id, IClassPersister persister)
bei NHibernate.Impl.SessionImpl.DoUpdate(Object obj, Object id, IClassPersister persister)
bei NHibernate.Impl.SessionImpl.Update(Object obj)
bei Cyberline.WorkLogger.Logic.WorkLoggerLogic.EditTimeSpan(TimeSpan oldTs, DateTime start, DateTime end, Action act) in C:\Development\WorkLogger\WorkLogger\Logic\WorkLoggerLogic.cs:Zeile 1321.
Name and version of the database you are using: SQL Server 2005
Database name: WorkLogger
Table: TimeSpans
Problembeschreibung:
Eigentlich will ich nur einen schon bestehenden TimeSpan (oldTs) in der Tabelle Timespans updaten.
Wenn ich beim debuggen jedoch beim Befehl 'session.Update(oldTs)' ankomme, meckert es mir immer:
'a different object with the same identifier value was already associated with the session'
Aber ich bin mir sicher dass ich in der Tabelle keine redundanten Datensätze habe und auch in während dieser Session nicht zwei aufmache. Oder etwa doch?
Kann mir jemand sagen worauf ich achten muss um den Fehler etwas einkreisen zu können?
Danke und Gruss
Whisky