Nhibernate - сопоставление «один-к-одному» с Cascade all-delete-orphan, не удаляя сироту - PullRequest
5 голосов
/ 18 апреля 2011

У меня есть объект «Интервью», который имеет взаимно-однозначное сопоставление с объектом «FormSubmission», сущность «Интервью», так сказать, является доминирующей стороной, отображение:Обе сущности являются частью Агрегата, а Интервью выступает в качестве Агрегатного Корня.Я пытаюсь сохранить / обновить / удалить FormSubmission через сущность Interview, поэтому я сопоставил конец ассоциации Interview как cascade = "all-delete-orphan".Например, я могу создать новую отправку FormSubmission просто так:

myInterview.Submission = new FormSubmission(myInterview);
InterviewRepository.Save(myInterview);

... и это прекрасно работает, FormSubmission сохранено.Тем не менее, я не могу удалить FormSubmission, который я пытаюсь сделать следующим образом:

myInterview.Submission = null;
InterviewRepository.Save(myInterview);

... но это, похоже, не удаляет FormSubmission.Я попытался присвоить null обеим сторонам ассоциации:

myInterview.Submission.Interview = null;
myInterview.Submission = null;
InterviewRepository.Save(myInterview);

Я даже пытался установить cascade = "all-delete-orphan" на стороне FormSubmission, но, похоже, ничего не работает.Чего мне не хватает?

1 Ответ

5 голосов
/ 18 апреля 2011

Наверное, это не тот ответ, который вы хотите. Каскад «все-удалить-сирота» не поддерживается для первичной привязки «один-к-одному» в соответствии с этой проблемой: https://nhibernate.jira.com/browse/NH-1262. Даже связь «один-к-одному» с внешним ключом, скорее всего, игнорирует «все-удалить-потерянную» каскад:

<class name="Interview">
    <id name="Id" column="Id" type="Int64">
        <generator class="identity" />
    </id>

    <property name="Name" />

    <many-to-one name="Submission" unique="true" cascade="all-delete-orphan" />
</class>

<class name="FormSubmission">
    <id name="Id" column="Id" type="Int64">
        <generator class="identity" />
    </id>

    <property name="Name" />

    <one-to-one name="Interview" cascade="all-delete-orphan" property-ref="Submission"  />
</class>

EDIT: jchapman предлагает использовать перехватчик (прослушиватель событий более предпочтителен в NH2.x и более поздних версиях) для эмуляции этой функции, которая звучит интересно, но я пока не знаю, как реализовать такой перехватчик / прослушиватель событий.

...