Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как получить данные много-ко-многим, при отключенном lazy loading - EF6
|
|||
|---|---|---|---|
|
#18+
Стажируюсь. Lazy loading, или на русском отложенное исполнение, нам сказали отключить. Обосновили это тем, что хоть это и удобно, сзади создаются дополнительные заявки, что сказывается на производительности. По скольку lazy loading отключен, надобность в ключевом слове virtual отпадает, мы его удаляем, а так же отключаем proxy. DbContext: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Встаёт вопрос, как теперь получить данные из БД? Хотя схема БД выглядит следующем образом: В c# её можно представить лишь тремя классами. И джоинвать не получиться. Код: 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. 39. 40. 41. 42. 43. 44. 45. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2016, 12:28 |
|
||
|
Как получить данные много-ко-многим, при отключенном lazy loading - EF6
|
|||
|---|---|---|---|
|
#18+
unsafe, что получить-то надо? С точки зрения пользователя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2016, 12:38 |
|
||
|
Как получить данные много-ко-многим, при отключенном lazy loading - EF6
|
|||
|---|---|---|---|
|
#18+
skyANA, Привет. Нужно получить продукты со списком заказов к каждому продукту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2016, 12:53 |
|
||
|
Как получить данные много-ко-многим, при отключенном lazy loading - EF6
|
|||
|---|---|---|---|
|
#18+
unsafeВ c# её можно представить лишь тремя классами ну изза того что ты прокинул в ProductsOrders ключ первичный ID то 4 класса, если в 3 класса то надо убрать ID и дописать что то типо Код: c# 1. 2. 3. 4. и что мешает сделать то вот так: Код: c# 1. EF6 сгенерит запрос примерно такой Код: sql 1. а потом уже он сам сгруппирует заказы в коллекцию, если ты бы писал на голом sql тож самое делал бы, просто обходил коллекцию и группировал по товару, вариантов других нет если тащить 1 запросом. п.с. ваще не вижу смысла отключения Lazy loading, просто dto на конкретную форму и проблем нет с Lazy loading вообще, хотя может ради соблазна, но он(lazy) полезен все таки порой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2016, 18:45 |
|
||
|
Как получить данные много-ко-многим, при отключенном lazy loading - EF6
|
|||
|---|---|---|---|
|
#18+
handmadeFromRuunsafeВ c# её можно представить лишь тремя классами ну изза того что ты прокинул в ProductsOrders ключ первичный ID то 4 класса, если в 3 класса то надо убрать ID и дописать что то типо Я имел ввиду что можно и тремя классами. Вообще честно говоря мне это кажется немного странным. Вы как более опытнай разработчик подскажите, как поступить? handmadeFromRu Код: c# 1. 2. 3. 4. Спасибо, буду знать куда рыть. handmadeFromRu Код: c# 1. EF6 сгенерит запрос примерно такой Код: sql 1. а потом уже он сам сгруппирует заказы в коллекцию, если ты бы писал на голом sql тож самое делал бы, просто обходил коллекцию и группировал по товару, вариантов других нет если тащить 1 запросом. п.с. ваще не вижу смысла отключения Lazy loading, просто dto на конкретную форму и проблем нет с Lazy loading вообще, хотя может ради соблазна, но он(lazy) полезен все таки порой. В этом ведь и весь смысл. Мы отключаем lazy loading, так как он сзади создает несколько заявок, да ещё и прокси генерит, и тащим всё одной заявкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2016, 20:35 |
|
||
|
Как получить данные много-ко-многим, при отключенном lazy loading - EF6
|
|||
|---|---|---|---|
|
#18+
unsafeЯ имел ввиду что можно и тремя классами. Вообще честно говоря мне это кажется немного странным. Вы как более опытнай разработчик подскажите, как поступить? ну тут как бы если по феншую то выкидываешь id из ProductsOrders , потому что ключ лишний, у тебя итак естественый ключ по 2 полям. А так бывает приходится денормализировать таблицы ради профита, тут тебе решать надо самому. Ну и добавление через 4 таблицу как то понятнее выглядит по началу. unsafeВ этом ведь и весь смысл. Мы отключаем lazy loading, так как он сзади создает несколько заявок, да ещё и прокси генерит, и тащим всё одной заявкой. дело не в lazy loading, а как использовать инструмент. Я ж написал тебе как на линку будет запрос выглядить, 1 ручкой подтянет все, и ничего отключать не надо. п.с. хз я вот юзаю lazy loading внутри 1 контекста, если уж тормозит то да я делаю dto-ку. если там массовое сохранние то ваще sqlbulk привет) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2016, 23:40 |
|
||
|
Как получить данные много-ко-многим, при отключенном lazy loading - EF6
|
|||
|---|---|---|---|
|
#18+
handmadeFromRu, Будет ещё пара вопросов. К примеру пускаю цикл Код: c# 1. 2. 3. 4. 5. 1) Причем если, вместо db.Categories написать db.Categories.ToList() то список категорий будет больше. Да же не знаю в чём причина такого вывода, единственно что в голову подкрадывается, так это что в таком случае EF использует LEFT JOIN. Но заявки вроде бы идентичные. 2) У меня в классе Category создан список с продуктами. Подгрузить данные в этом в же цикле через category.Products не получается. Правда если перед циклом прописать db.Products.ToList() то всё успешно подгружается. Поняв что эту связь надо то же настроить вручную, руководствуясь мануалом написал следующее: Код: c# 1. 2. 3. 4. Но это не помогло. 3) Что касается переопределения функции OnModelCreating, при отключении lazy loading, надо ли все связи настраивать вручную с помощью Fluent API. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2016, 11:33 |
|
||
|
Как получить данные много-ко-многим, при отключенном lazy loading - EF6
|
|||
|---|---|---|---|
|
#18+
unsafehandmadeFromRu, Будет ещё пара вопросов. К примеру пускаю цикл Код: c# 1. 2. 3. 4. 5. ну а чего тебе не сгенерить дто тут ? зачем сам обходить с подзапросом? Код: c# 1. 2. 3. [quot unsafe] Код: c# 1. 2. 3. 4. ну вроде с виду правильно. но если ты используешь нотацию аля categoryId => Category но для 1 :n ef сам разрулит. unsafe3) Что касается переопределения функции OnModelCreating, при отключении lazy loading, надо ли все связи настраивать вручную с помощью Fluent API. руками надо когда у тебя ключи и сущности не в нотации вы указанной выше, или сложные варианты n:n и какие то особые случаи. п.с. можно еще атрибутами эт заменить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2016, 19:10 |
|
||
|
Как получить данные много-ко-многим, при отключенном lazy loading - EF6
|
|||
|---|---|---|---|
|
#18+
handmadeFromRu, Я вроде бы совсем разобрался. Я пускал цикл именно таким образом в надежде получать такой же простой доступ к категориям через продукты, как если бы был включен lazy loading. Спасибо Вам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2016, 21:15 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=39237724&tid=1355883]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 330ms |

| 0 / 0 |
