我有以下型號:刪除拋出「已刪除對象將被重新保存通過級聯」
<class name="Person" table="Person" optimistic-lock="version">
<id name="Id" type="Int32" unsaved-value="0">
<generator class="native" />
</id>
<!-- plus some properties here -->
</class>
<class name="Event" table="Event" optimistic-lock="version">
<id name="Id" type="Int32" unsaved-value="0">
<generator class="native" />
</id>
<!-- plus some properties here -->
</class>
<class name="PersonEventRegistration" table="PersonEventRegistration" optimistic-lock="version">
<id name="Id" type="Int32" unsaved-value="0">
<generator class="native" />
</id>
<property name="IsComplete" type="Boolean" not-null="true" />
<property name="RegistrationDate" type="DateTime" not-null="true" />
<many-to-one name="Person" class="Person" column="PersonId" foreign-key="FK_PersonEvent_PersonId" cascade="all-delete-orphan" />
<many-to-one name="Event" class="Event" column="EventId" foreign-key="FK_PersonEvent_EventId" cascade="all-delete-orphan" />
</class>
沒有屬性指向PersonEventRegistration親身也不事件。
當我嘗試刪除PersonEventRegistration的條目,我得到以下錯誤:
"deleted object would be re-saved by cascade"
的問題是,我不存儲任何其他集合這個對象 - 刪除代碼如下所示:
public bool UnregisterFromEvent(Person person, Event entry)
{
var registrationEntry = this.session
.CreateCriteria<PersonEventRegistration>()
.Add(Restrictions.Eq("Person", person))
.Add(Restrictions.Eq("Event", entry))
.Add(Restrictions.Eq("IsComplete", false))
.UniqueResult<PersonEventRegistration>();
bool result = false;
if (null != registrationEntry)
{
using (ITransaction tx = this.session.BeginTransaction())
{
this.session.Delete(registrationEntry);
tx.Commit();
result = true;
}
}
return result;
}
我在做什麼錯在這裏?
我沒有注意到這個職位不包含所有格式... 無論如何 - 事件和人物映射不包含有關PersonEventRegistration的任何信息。這個類用於支持多對多映射+一些額外的屬性(我沒有找到任何例子,其中nhibernate會支持這種情況)。 反正我會嘗試cascade =「delete」。 – Greg 2009-06-02 05:33:48