|
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&msg=38387682&tid=1349934]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
127ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 238ms |
0 / 0 |