|
[NHibernate] Unable to resolve property: _{Namespace}
|
|||
---|---|---|---|
#18+
Доброго здоровья. Работаю с БД через NHibernate. В базу пишется объект, имеющий более 20 полей, некоторые - это списки списков. Для того, чтобы сохранять изменения, которые произошли в списках, использую session.Merge(), для того, чтобы эти списки правильно обрабатывались: в главную очередь - удалялись те элементы, которые пользователь удалил в UI. Некоторое время работало так, как нужно, но потом начало выбрасываться исключение NHibernate.HibernateException = "Unable to resolve property: _dt_shared" Что делать, как заставить работать правильно? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 09:25 |
|
[NHibernate] Unable to resolve property: _{Namespace}
|
|||
---|---|---|---|
#18+
_Novichok, для начала выложить классы, маппинги, и код на котором валится ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 09:44 |
|
[NHibernate] Unable to resolve property: _{Namespace}
|
|||
---|---|---|---|
#18+
класс, описывающий объект: Код: 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.
соответствующий мапинг: Код: xml 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79.
класс, взаимодействующий с БД: Код: 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.
причем исключение вываливается, когда изменяется список элементов какого-то из поля ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 14:57 |
|
[NHibernate] Unable to resolve property: _{Namespace}
|
|||
---|---|---|---|
#18+
Up ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2013, 00:38 |
|
[NHibernate] Unable to resolve property: _{Namespace}
|
|||
---|---|---|---|
#18+
_Novichok, Странно, странно. Всё-таки поищите в своих маппингах слово _dt_shared. Уже очень похоже на описку при маппинге какого-либо объекта. И почему-то мне кажется, это проблема в классе Enterprise. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2013, 09:54 |
|
[NHibernate] Unable to resolve property: _{Namespace}
|
|||
---|---|---|---|
#18+
Да не, исключение вываливается, когда к какой-то из коллекций добавился новый элемент. dt_shared (без нижнего подчеркивания) - это проект в солюшене, который отвечает за взаимодействие с БД. Соответственно, нейспейс по-умолчанию - dt_shared. А нижнее подчеркивание добавляет сам фреймворк, когда вываливает исключение. Люди уже стыкались с этой проблемой Все дело в коллекциях. Когда ничего не изменять - все работает. Когда удалил какой-то элемент из списка - работает. Когда добавился новый элемент в одну из коллекций (неважно в какую) - выдает данное исключение. В документации про метод Merge() сказано следующее: http://www.nhforge.org/doc/nh/en/index.html#manipulatingdata-updating-detached This method copies the state of the given object onto the persistent object with the same identifier. If there is no persistent instance currently associated with the session, it will be loaded. The method returns the persistent instance. If the given instance is unsaved or does not exist in the database, NHibernate will save it and return it as a newly persistent instance. Otherwise, the given instance does not become associated with the session. In most applications with detached objects, you need both methods, SaveOrUpdate() and Merge(). Меня заинтересовала такая строчка: In most applications with detached objects, you need both methods, SaveOrUpdate() and Merge(). Действительно, когда добавился элемент в коллекцию - при использовании SaveOrUpdate() - работает. Но он не удаляет из БД элементы, которые были пользователем удалены. Вместо него это делает Merge(). Но он не добавляет в БД элементы, которые были добавлены пользователем. Причем, может быть такая ситуация, когда из одной коллекции элементы были удалены, а в другую добавлены. Или в одной коллекции какие-то элементы удалены, а какие-то новые добавлены. Возникает вопрос: как же использовать SaveOrUpdate() и Merge() вместе? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2013, 20:17 |
|
[NHibernate] Unable to resolve property: _{Namespace}
|
|||
---|---|---|---|
#18+
Кому надо будет, решил проблему следующим способом (иногда все-таки надо читать документацию :) ): Код: 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
При чем важно делать это в разных сессиях. Возможно как-то можно очищать сессию, но пока я над этим не заморачиваюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2013, 15:28 |
|
[NHibernate] Unable to resolve property: _{Namespace}
|
|||
---|---|---|---|
#18+
session.Evict(Object obj) - метод который удаляет экземпляр obj из кеша сессии. есть еще метод session.Clear(), который полностью очищает сессию, удаляя все загруженные экземпляры и изменения, ожидающие сохранения ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2013, 12:07 |
|
|
start [/forum/topic.php?fid=17&fpage=25&tid=1349980]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
108ms |
get tp. blocked users: |
2ms |
others: | 268ms |
total: | 473ms |
0 / 0 |