Nhibernate - элемент получает свой ParentID, обновленный до нуля, вместо удаления

Бизнес-логика внутри процесса такова:

  • начать транзакцию
  • добавить элемент в коллекцию
  • выполнить поиск ("somethingA")
  • удалить этот элемент в зависимости от на предыдущем шаге.
  • фиксация транзакции

Я использую каскадное удаление всех-сирот и обратное значение = истина, оба в моем родительском классе. При удалении элемента из коллекции я устанавливаю .parentObj = null и удаляю элемент из коллекции.

При использовании TemplateFlushMode.Auto , я профилировал базу данных и сделал следующее:

  • INSERT item
  • SELECT, связанный с чем-то A
  • UPDATE parentID (FK для родительского элемента) Item до NULL

(вставляемый элемент выполняется, потому что выполняется find () , чтобы гарантировать согласованность данных в базе данных). Выбор сделан, а затем я ожидал, что будет выполнено DELETE ... но выполнено обновление до parentID = null .

При выполнении Session.Flush () прямо перед Find () происходит следующее:

  • INSERT item
  • SELECT, связанный с чем-то A
  • DELETE Item

При использовании TemplateFlushMode.Commit изменения вносятся в конце транзакции, и элемент никогда не вставляется:

  • SELECT, связанный с чем-тоA

Приложение, с которым я работаю, использует TemplateFlushMode.Auto , поэтому мне интересно, есть ли объяснение, почему каскадирование не работает, если выбор выполняется между добавлением и удалением одного элемента в той же транзакции?

I знайте, что первый ответ, который приходит на ум, - «не добавляйте элемент в коллекцию, если он будет удален впоследствии». Но я бы предпочел не менять бизнес-логику.

Кто-нибудь знает, почему выполняется обновление вместо удаления при использовании АВТО ? (при использовании Commit объект не вставляется)

8
задан Ian Nelson 25 December 2011 в 17:11
поделиться