|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.ProНу интересно, они что, с нуля его писали? Я полагал, большинство кода взято все-таки с EF6. Ну и не могу же я юзать EF6 под ASP.NET Core. Опять же - задача-то абсолютно тривиальная - два Left Joina. Ну а как это решается в EF6? Да, пишут с нуля. Потому что решили покрыть не только реляционку, но и NoSQL тоже. И архитектуру внутри решили поменять в корне. Отсюда все грабли :) Shocker.Proвот это не совсем понял https://github.com/ServiceStack/ServiceStack.OrmLite Поддерживает Core в полный рост, умеет то, что ты хочешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2018, 08:01 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
hVosttя знаю, что представленный коду кода выше не буде null в ответах т.к. left join. Это меня смущает. А про core звоночки что сырой действительно слышал. Просто проверять то 3 мин.времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2018, 08:40 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
hVostt https://github.com/ServiceStack/ServiceStack.OrmLite Поддерживает Core в полный рост, умеет то, что ты хочешь.Спасибо. То есть ты имел ввиду - заменить сам ОРМ (меня смутило слово провайдер). Но сейчас так просто прыгнуть не получится, нужно будет переписывать репозиторий, в котором много чего. С EF на Core переделок было минимально, на вот на другой ОРМ перейти щас нет времени. А что там с миграциями у вас было, не помнишь? Пока тьфу-тьфу, не споткнулся. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2018, 11:09 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.ProА что там с миграциями у вас было, не помнишь? Пока тьфу-тьфу, не споткнулся У миграций могут быть проблемы с поддержкой провайдеров. Сложные миграции, типа переименования, изменения связей могут ломаться. Обычные, типа создать таблицу, колонку, работают в принципе :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2018, 14:36 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.ProНо сейчас так просто прыгнуть не получится, нужно будет переписывать репозиторий, в котором много чего. С EF на Core переделок было минимально, на вот на другой ОРМ перейти щас нет времени. Тогда придётся пока костыли впихивать :) Там, где нужны сложные запросы, обходиться либо SELECT N+1, либо писать на чистом SQL и маппить в DTO классы, это он умеет. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2018, 14:37 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Прочитал счас что linq не поддерживает outer join ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2018, 15:02 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Petro123Прочитал счас что linq не поддерживает outer join ))) Никогда не поддерживал. Ни сейчас, ни когда-то там. И не планируется. Решается через группировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2018, 15:22 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Petro123Прочитал счас что linq не поддерживает outer join )))Может тебе сначала стоит литературку там почитать, учебники, опыт какой-никакой приобрести, а потом уже консультировать на форуме? А то в каждом топике затычка, а толку в каждом из них - ноль. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2018, 15:46 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.Pro, Ну дак я учусь. А ты такой злой потому что запрос не работает? Решение нашел? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2018, 15:51 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
hVosttДа, пишут с нуля. Потому что решили покрыть не только реляционку, но и NoSQL тоже. И архитектуру внутри решили поменять в корне. Отсюда все грабли :)Ну в общем, спасибо, что обратил моё внимание на это, я-то исходил, что в EF Core может быть только больше функционала, но никак не меньше, соответственно, были неверные посылы. Сейчас появилось немного времени, поковырялся уже с новой точкой зрения и откопал две вещи: 1) В EF Core нет ленивой загрузки (!) 2) При применении ThenInclude есть косяк в VS - неверно работает Intellisense, соответственно, это меня тоже сбило с толкуCurrent versions of Visual Studio offer incorrect code completion options and can cause correct expressions to be flagged with syntax errors when using the ThenInclude method after a collection navigation property. This is a symptom of an IntelliSense bug tracked at https://github.com/dotnet/roslyn/issues/8237. It is safe to ignore these spurious syntax errors as long as the code is correct and can be compiled successfully. В итоге можно просто написать через навигационные свойства Код: c# 1. 2. 3. 4.
Все равно через ж, потому что проекция не работает, точнее сгенерит N*M+1 запрос, но хотя бы можно материализовать и потом спроецировать. Запрос к БД при этом тоже интересно, получается три запроса - Customers Orders Inner Join Customers Goods InnerJoin Orders Inner Join Customers И фильтр пробрасывается во все три запроса, в результате получается-таки LEFT JOIN. Ну это хотя бы не N*M+1 запрос. И группировка не работает. Да, полное овно. Я офигел, честно говоря. Был же продукт. Ну пилили бы другой с другим названием с нуля, зачем ломать старый-то, революционеры хреновы. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2018, 22:23 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
hVostt https://github.com/ServiceStack/ServiceStack.OrmLite Поддерживает Core в полный рост, умеет то, что ты хочешь.Посмотрел овервью, да, похоже вещь сделана для людей и руками, а не жо-ой. Даже есть SelectFilter на таблицу, то что я руками пилил в своем RepositoryBase поверх EF. Ты вообще с этой штукой работал, понравилось? И я правильно понял: 1) Аналога трекера там нет, то есть встроить дополнительную модификацию объектов перед общим сбросом в БД не получится? 2) Про автоматическое изменение схемы БД тоже ничего толком не нашел - все миграции ручками? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2018, 22:30 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.ProТы вообще с этой штукой работал, понравилось? Использовал в проектах, где требовался полный контроль над СУБД и LINQ, понравилось :) Shocker.Pro1) Аналога трекера там нет, то есть встроить дополнительную модификацию объектов перед общим сбросом в БД не получится? Нет, здесь смысл в том, что ты сам формируешь изменения, при необходимости групповые (чего нет в EF по факту и не может быть). По поводу трекинга вопрос, конечно в определённых случаях трекинг отличное решение, но по опыту, на перспективу не очень. При развитии проекта трекинг больше мешает, чем помогает. Хотя никто не мешает сделать его там, где это необходимо с помощью DynamicProxy / Observable, или вообще через Event Sourcing. Shocker.Pro2) Про автоматическое изменение схемы БД тоже ничего толком не нашел - все миграции ручками? Ну не совсем прям ручками. Во-первых, https://www.codeproject.com/Articles/1197504/How-to-use-code-first-and-data-migration-with-Serv Во-вторых, это редкий случай, когда ORM содержит поддержку DDL, так что можно абстрагироваться от СУБД и писать миграции на более высоком уровне. В общем, тут целиком зависит от задач и от личных предпочтений в работе с данными. С учётом того, что на Core вменяемого решения ещё ждать минимум пару лет, стоит задуматься о других решениях. По крайне мере в OrmLite есть поддержка LINQ, DDL и достаточный уровень абстракции, чтобы задействовать типизацию и при этом иметь контроль над данными. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2018, 22:53 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.Pro1) В EF Core нет ленивой загрузки (!) Это вообще жесть, один из основных причин, держать его пока подальше от продакшена. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2018, 22:55 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.ProЯ офигел, честно говоря. Был же продукт. Ну пилили бы другой с другим названием с нуля, зачем ломать старый-то, революционеры хреновы. Ну чё, нашли фатальный недостаток, нормально :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2018, 22:56 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#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.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2018, 23:00 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
hVosttВо-вторых, это редкий случай, когда ORM содержит поддержку DDL, так что можно абстрагироваться от СУБД и писать миграции на более высоком уровне.А можешь пояснить? Тут не догнал. hVosttНу чё, нашли фатальный недостаток, нормально :)Да ну, тут ты гонишь - его же они сами и писали ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2018, 23:25 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.ProhVosttВо-вторых, это редкий случай, когда ORM содержит поддержку DDL, так что можно абстрагироваться от СУБД и писать миграции на более высоком уровне.А можешь пояснить? Тут не догнал. Ну вот же Код: c# 1.
оформляешь в миграции, и хранишь как тебе надо, мне кстати нравится как это сделано в EF6 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2018, 23:37 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
А данные? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2018, 23:50 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.ProА данные? Ну Create/Update... )) Ты же про посев? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2018, 07:46 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.Pro, Не придираясь, исключительно для уточнения наезда на Core: 1) как решил что ленивая не работает? 2) базовую таблицу from не пробовал сменить? 3) запросы сразу к трем таблицам Много ко Много вполне могут допилить позже. Они не каждодневные и больше не к ОРМ идут а к отчетникам и аналитикам. Imho ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2018, 08:42 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
В тему, смена синтаксиса при переходе на Core с EF6. https://stackoverflow.com/questions/40319251/using-ef-core-theninclude-on-junction-tables ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2018, 09:12 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
hVosttShocker.ProА данные? Ну Create/Update... )) Ты же про посев?Я вообще про апгрейды, развертывание в том числе. Если в EF я просто занимаюсь разработкой могу несколько раз поменять модель и когда пришло время, миграция сгенерилась автоматически, то тут я должен менять модель и сам ручками параллельно делать как миграцию (следя за тем, чтобы она оставалась синхронной с моделью), так и поддерживать версионность схемы БД, если я не работаю напрямую с продакшен базой, а предполагаю, что схема должна обновляться у клиента в автоматическом режиме. Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2018, 09:33 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Petro1231) как решил что ленивая не работает? https://docs.microsoft.com/en-us/ef/core/querying/related-data Petro1232) базовую таблицу from не пробовал сменить?? Petro1233) запросы сразу к трем таблицам Много ко Много вполне могут допилить позже. Это мне пока не требовалось от Core, с другой стороны, я и не использовал М:М возможности и в EF.NET, создавал таблицу связок вручную.Petro123Они не каждодневные и больше не к ОРМ идут а к отчетникам и аналитикам.Теоретик, блин ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2018, 09:39 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.ProPetro1232) базовую таблицу from не пробовал сменить?? Много ко многим: покупатели <--> товары Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2018, 09:55 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.ProЕсли в EF я просто занимаюсь разработкой могу несколько раз поменять модель и когда пришло время, миграция сгенерилась автоматически, то тут я должен менять модель и сам ручками параллельно делать как миграцию (следя за тем, чтобы она оставалась синхронной с моделью), так и поддерживать версионность схемы БД, если я не работаю напрямую с продакшен базой, а предполагаю, что схема должна обновляться у клиента в автоматическом режиме. Так? Всё верно. Все миграции писать ручками, завести служебную таблицу миграций (чтобы поддерживать схему БД), написать механизм миграций. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2018, 09:58 |
|
|
start [/forum/topic.php?fid=17&msg=39617640&tid=1349207]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
65ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 194ms |
0 / 0 |