나는 nhibernate 3.1에 의한 프로젝트를 가지고있다. 프로젝트에서 동시성 구현이 필요합니다. 나는 HBM 파일에 "버전"을 추가 Nhibernat 3.1에서 얼마나 동시성 구현
<class name="Person" table="Person_Person" >
<id name="Id" type="Int64" unsaved-value="0" >
<generator class="native" />
</id>
<version name="Version" />
<property name="FirstName" column="FirstName"
type="String(255)" update="true" insert="true" access="property" not-null="false" />
<property name="LastName" column="LastName"
type="String(255)" update="true" insert="true" access="property" not-null="false" />
</class>
이 또한 내가 엔티티 버전 필드를 추가 :
virtual protected int Version { get; set; }
이 또한 내가 INT 타입으로 데이터베이스에 버전 필드를 추가합니다.
이 구현은 한 번만 정확합니다. 데이터베이스의 버전 값이 '0'일 때만 작동합니다. 테이블에서이 행을 처음으로 업데이트 한 후이 값은 '1'로 변경됩니다. 는 그러나 다음 업데이트 버전 필드가없는 경우 '0'예를 들어 '1'이 메시지에 의해 던져 예외 :
Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [RCISP.Domain.Entities.Person#4]
어떻게해야합니까?
스택 추적은 다음과 같습니다 당신이 바로 그 일을 같이
at NHibernate.Persister.Entity.AbstractEntityPersister.Update(Object id, Object[] fields, Object[] oldFields, Object rowId, Boolean[] includeProperty, Int32 j, Object oldVersion, Object obj, SqlCommandInfo sql, ISessionImplementor session)
at NHibernate.Persister.Entity.AbstractEntityPersister.UpdateOrInsert(Object id, Object[] fields, Object[] oldFields, Object rowId, Boolean[] includeProperty, Int32 j, Object oldVersion, Object obj, SqlCommandInfo sql, ISessionImplementor session)
at NHibernate.Persister.Entity.AbstractEntityPersister.Update(Object id, Object[] fields, Int32[] dirtyFields, Boolean hasDirtyCollection, Object[] oldFields, Object oldVersion, Object obj, Object rowId, ISessionImplementor session)
at NHibernate.Action.EntityUpdateAction.Execute()
at NHibernate.Engine.ActionQueue.Execute(IExecutable executable)
at NHibernate.Engine.ActionQueue.ExecuteActions(IList list)
at NHibernate.Engine.ActionQueue.ExecuteActions()
at NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session)
at NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event)
개인 클래스의 버전은 정확하지만 다른 클래스의 관계는 문제가 있습니다. 예를 들어 패밀리 클래스 (일대 다)에 의한 관계. 엔티티 클래스와 두 hbm 파일 모두에 버전 필드를 추가합니다. 맞습니까? – Ehsan