|
LazyInitializationException illegal access to loading collection при маппинге one-to-many
|
|||
---|---|---|---|
#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.
Код: 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.
И их маппинги: Код: 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.
При выполнении кода Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Получаем исключение NHibernate.LazyInitializationException с описанием illegal access to loading collection. Что ему не так? Как это побороть? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2012, 13:22 |
|
LazyInitializationException illegal access to loading collection при маппинге one-to-many
|
|||
---|---|---|---|
#18+
Lexxxxx, а метод Load используется умышленно? Чем Get не подошёл? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2012, 13:28 |
|
LazyInitializationException illegal access to loading collection при маппинге one-to-many
|
|||
---|---|---|---|
#18+
SolYUtor, Да вот как раз для отложенной загрузки он и нужен. Черт его знает сколько ордеров у юзера. Думаю не нужно их таскать все из базы постоянно. (P.S. строка .Access.ReadOnlyPropertyThroughLowerCaseField() в мапинге UserMap указана по ошибке и в коде отсутствует.) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2012, 13:39 |
|
LazyInitializationException illegal access to loading collection при маппинге one-to-many
|
|||
---|---|---|---|
#18+
Lexxxxx, Это не совсем та отложенная загрузка, о которой вы думаете. Начнём с простого: 1. Get() грузит из базу только таблицу с самой сущностью, при этом заполняются все поля, которые есть в этой таблицы. Все связи (включая коллекции) не грузятся, пока не будут вызываны. 2. Load() - не грузит из базы вообще ничего! Он возвращает вам пустой прокси-класс. И при первом же обращении к полям полезет в базу с запросом к основной таблице. Его использование оправдано в некоторых случаях, но явно не в этом. PS. Влючите в конфиге хибера LogSqlToConsole, и смотрите, что реально происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2012, 13:49 |
|
LazyInitializationException illegal access to loading collection при маппинге one-to-many
|
|||
---|---|---|---|
#18+
SolYUtor, Спасибо за подсказку об отложенной загрузке. Проблема решена путем добавления в OrderMap строки .Access.LowerCaseField() для свойства User. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2012, 13:57 |
|
|
start [/forum/topic.php?fid=17&msg=38021651&tid=1350197]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
136ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 289ms |
total: | 505ms |
0 / 0 |