|
|
|
NHibernate many-to-one cascade="save-update"
|
|||
|---|---|---|---|
|
#18+
Есть такой набор таблиц как на картинке и классов соответственно. Пытаюсь удалить из коллекции ChemicalIndicatorValues объекта CertificateQuality пару элементов и делаю Update, ничего не выходит. Если добавляю в коллекцию и вызываю Update, то нормально добавляется в БД. Подскажите почему не удаляет? И еще вопрос: как гибернейт узнает, что объект изменился и генерит запрос в БД? Вот код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. Маппинги: PlanCertificate Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. CertificateQuality Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2013, 15:23 |
|
||
|
NHibernate many-to-one cascade="save-update"
|
|||
|---|---|---|---|
|
#18+
maratossЕсть такой набор таблиц как на картинке и классов соответственно. Пытаюсь удалить из коллекции ChemicalIndicatorValues объекта CertificateQuality пару элементов и делаю Update, ничего не выходит. Если добавляю в коллекцию и вызываю Update, то нормально добавляется в БД. NHibernate построен на сессионности, т.е. каждая сессия - это Unit of work. А вы пытаетесь удалять из объекта данные, когда сессия уже закрыта. Это detached объект, и NHibernate его не контролирует. maratossПодскажите почему не удаляет? И еще вопрос: как гибернейт узнает, что объект изменился и генерит запрос в БД? NHibernate генерерует proxy-объекты на лету, и возвращает не реальные сущности, а их наследников. Поэтому при вызовах соответсвующих методов сравнивает значения с оригинальными, и таким образом отмечает объект как измененный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2013, 18:11 |
|
||
|
NHibernate many-to-one cascade="save-update"
|
|||
|---|---|---|---|
|
#18+
SolYUtorNHibernate построен на сессионности, т.е. каждая сессия - это Unit of work. А вы пытаетесь удалять из объекта данные, когда сессия уже закрыта. Это detached объект, и NHibernate его не контролирует. Пытался приаттачить объект методом session.merge(PlanCertificate), но изменения в БД при аттаче не скидываются и возвращается объект, который лежит в БД с заполненной коллекцией. Почему при мердже он не скидывает изменения? Может нужно как-то подсказать ему что свойство у объекта изменилось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2013, 12:03 |
|
||
|
NHibernate many-to-one cascade="save-update"
|
|||
|---|---|---|---|
|
#18+
Кстати если написать так, то после мерджа сохраняет в БД, а после апдейта удаляет из БД: Код: c# 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2013, 12:09 |
|
||
|
NHibernate many-to-one cascade="save-update"
|
|||
|---|---|---|---|
|
#18+
maratoss, вы всё равно пытаетесь плыть против течения. Merge стоит использовать только в крайних случаях, когда возникают ошибки при работе с бд или что-нибудь в этом духе. В остальных случаях держите сессию открытой пока не завершите всю работу с ней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2013, 12:16 |
|
||
|
|

start [/forum/topic.php?fid=17&fpage=24&tid=1349934]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 253ms |
| total: | 394ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...