powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
65 сообщений из 65, показаны все 3 страниц
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616686
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То ли задачка то ли оказалась нетривиальной, то ли я где-то сильно затупил.

Вот запрос на SQL
Код: sql
1.
2.
3.
4.
5.
SELECT  ...
FROM    Customers
        LEFT JOIN Orders ON Customers.Id = Orders.CustomerId
        LEFT JOIN Goods ON Orders.Id = Goods.OrderId
WHERE   Customers.Id IN (1,2,3)



У покупателя может не быть заказов, либо у заказов может не быть товаров, в этом случае я должен получить только поля покупателя и NULL для полей заказа и товара.

При попытке написать на Linq2EF я либо получаю NullReferrenceException при попытке второго джойна (так как нет объекта, из которого надо достать id), либо отбор несколькими запросами, при этом внутренних таблиц не производится фильтрация в БД, то есть на клиента приходят все заказы и все товары и только потом фильтруются.

В общем, как написать этот запрос для EF?
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616742
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

покажи пример, что пишешь
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616774
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала замутил что-то такое:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
from customer in db.Customers
join order in db.Orders on customer.Id equals order.CustomerId
into orders
from order in orders.DefaultIfEmpty()
select new { customer, order }
into customerOrder
join good in db.Goods on customerOrder.order.Id equals good.OrderId
into orders
from order in orders.DefaultIfEmpty()
select new { customerOrder.customer, customerOrder.order, good}
into customerOrderGood


Потом такое:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
from customer in db.Customers
join ord in
	(from order in db.Orders
	join gd in
		(from good in db.Goods
		join model in db.Models on good.Id equals model.GoodId
		into models
		select new { good, models }) on order.Id equals gd.good.OrderId
	into goods
	select new { order, goods }) on customer.Id equals ord.order.CustomerId
into orders
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616805
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в первом накосячил, когда пример делал:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
from customer in db.Customers
join order in db.Orders on customer.Id equals order.CustomerId
into orders
from order in orders.DefaultIfEmpty()
select new { customer, order }
into customerOrder
join good in db.Goods on customerOrder.order.Id equals good.OrderId
into goods
from good in goods.DefaultIfEmpty()
select new { customerOrder.customer, customerOrder.order, good}
into customerOrderGood
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616916
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

а чё, нету навигационных полей, типа customer.Order? если есть, решается
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616920
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
похоже на то, что запрос материализуется сразу, а не транслируется в SQL
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616922
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttа чё, нету навигационных полей, типа customer.Order? если есть, решаетсяПоля есть (не customer.Order, а customer.Orders разумеется), но с ними совсем не взлетает. Гуглил, как я понял проблема сгенерить проекцию с нормальными джойнами, не получив N+1 запросов к базе, не решена (точнее решена в каком-то очень частном случае и только с одним уровнем джойна). Может ты подскажешь как?

hVosttпохоже на то, что запрос материализуется сразу, а не транслируется в SQLНет, в первом случае я получаю ровно один запрос к базе. Во втором N-1 (по количеству вложенных уровней), что тоже устраивало бы, только нижние уровне не фильтруются на уровне запроса к БД.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616925
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Code First, EF Core
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616930
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProCode First, EF Core

А, Core... понятно. Именно EF он ещё очень сырой, при чём настолько, что практически неюзабельно. Половина проекций не работает, группировка? давай досвидания... Миграции, как повезёт вообще, да и не работают толком как в EF 6.

Только SELECT N+1, советовал бы уйти на другой провайдер, в версии EF Core от него пользы как от козла молока. Ещё годик другой может.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616943
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProУ покупателя может не быть заказов, либо у заказов может не быть товаров, в этом случае я должен получить только поля покупателя и NULL для полей заказа и товара.нет логики в запросе.
Как заказ без товаров?
Покажи тест запроса на базе.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616950
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
Проверить, core виноват или нет, не долго. В демке на ef6.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616952
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProУ покупателя может не быть заказов, либо у заказов может не быть товаров, в этом случае я должен получить только поля покупателя и NULL для полей заказа и товара.
Либо запрос к товарам а не к покупателям.
Либо запрос к покупателям с агрегацией и сведением количества заказов.
Imho
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616974
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123нет логики в запросе.не ищи логику, это пример, а не рабочий код, хочешь - в зайцев перепиши.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616978
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProPetro123нет логики в запросе.не ищи логику, это пример, а не рабочий код, хочешь - в зайцев перепиши.
А что ее искать, если запрос не к той сущности.
Запрос должен быть логичен, а не джойнить все подряд.
Логично?
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616979
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttА, Core... понятно. Именно EF он ещё очень сырой, при чём настолько, что практически неюзабельно. Половина проекций не работает, группировка? давай досвидания... Миграции, как повезёт вообще, да и не работают толком как в EF 6.Ну интересно, они что, с нуля его писали? Я полагал, большинство кода взято все-таки с EF6. Ну и не могу же я юзать EF6 под ASP.NET Core.

Опять же - задача-то абсолютно тривиальная - два Left Joina. Ну а как это решается в EF6?


hVosttсоветовал бы уйти на другой провайдер, в версии EF Core от него пользы как от козла молока. Ещё годик другой может.вот это не совсем понял
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616981
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123А что ее искать, если запрос не к той сущности.
Запрос должен быть логичен, а не джойнить все подряд.
Логично?Не логично, я не буду тратить время, расписывая тебе реальную бизнес-модель полдня. Есть конкретная выборка, которую я хочу получить - два вложенных отношения один-ко-многим, названия сущностей можешь свои подставить, если тебя коробит.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616984
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proдва вложенных отношения один-ко-многим,
Сторону Многие сворачиваем через count?
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616985
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Список чего тебя интересует? Товаров? Заказов? Клиентов?
Может Много ко Много отношения?
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616987
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Сторону Многие сворачиваем через count?Да блин, ничего не сворачиваем, я же пример написал на SQL - ты видишь там Count?
В итоге мне нужно загрузить иерархическую модель в дерево.
Я конечно могу написать это ручками тремя запросами послойно, если нет другого выхода, но странно, если его нет.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616989
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proя же пример написал на SQL -я просил тест к базе и 5 строк результат.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616991
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProДа блин, ничего не сворачиваем, я
Блин! ))))
Если не сворачивать, то запрос к отношению Много!
Т.е. from Заказы!
Так?
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616994
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну или
Right, outer, left, ....чообы null появились.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616996
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Т.е. from Заказы!Какая разница между
FROM Заказы RIGHT JOIN Покупатели и
FROM Покупатели LEFT JOIN Заказы
Если тебе не нравится LEFT JOIN перепиши на RIGHT JOIN - суть не поменяется
Базовая таблица - Покупатели в данном случае
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39616999
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProБазовая таблица - Покупатели в данном случае
Дело твоё.
Возможно парсер линка не такой крутой как парсер субд.
Чтобы понимать что такое базовая таблица.
Я бы сделал тест в базе. Потом на ef6.
Удачи!
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39617174
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123hVostt,
Проверить, core виноват или нет, не долго. В демке на ef6.

Чё проверять, я знаю, что представленный код шокером, работает на EF6, без каких-то проблем. Мы пытались заюзать EF Core для небольшого проекта и встретили такую гору проблем, что решили, что пока как-нибудь без него. Взяли даппер.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39617177
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProНу интересно, они что, с нуля его писали? Я полагал, большинство кода взято все-таки с EF6. Ну и не могу же я юзать EF6 под ASP.NET Core.

Опять же - задача-то абсолютно тривиальная - два Left Joina. Ну а как это решается в EF6?

Да, пишут с нуля. Потому что решили покрыть не только реляционку, но и NoSQL тоже. И архитектуру внутри решили поменять в корне. Отсюда все грабли :)


Shocker.Proвот это не совсем понял

https://github.com/ServiceStack/ServiceStack.OrmLite

Поддерживает Core в полный рост, умеет то, что ты хочешь.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39617201
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttя знаю, что представленный коду кода выше не буде null в ответах т.к. left join.
Это меня смущает.
А про core звоночки что сырой действительно слышал.
Просто проверять то 3 мин.времени.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39617328
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt https://github.com/ServiceStack/ServiceStack.OrmLite

Поддерживает Core в полный рост, умеет то, что ты хочешь.Спасибо. То есть ты имел ввиду - заменить сам ОРМ (меня смутило слово провайдер).

Но сейчас так просто прыгнуть не получится, нужно будет переписывать репозиторий, в котором много чего. С EF на Core переделок было минимально, на вот на другой ОРМ перейти щас нет времени.

А что там с миграциями у вас было, не помнишь? Пока тьфу-тьфу, не споткнулся.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39617567
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProА что там с миграциями у вас было, не помнишь? Пока тьфу-тьфу, не споткнулся

У миграций могут быть проблемы с поддержкой провайдеров. Сложные миграции, типа переименования, изменения связей могут ломаться. Обычные, типа создать таблицу, колонку, работают в принципе :)
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39617569
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProНо сейчас так просто прыгнуть не получится, нужно будет переписывать репозиторий, в котором много чего. С EF на Core переделок было минимально, на вот на другой ОРМ перейти щас нет времени.

Тогда придётся пока костыли впихивать :) Там, где нужны сложные запросы, обходиться либо SELECT N+1, либо писать на чистом SQL и маппить в DTO классы, это он умеет.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39617590
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прочитал счас что linq не поддерживает outer join )))
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39617619
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Прочитал счас что linq не поддерживает outer join )))

Никогда не поддерживал. Ни сейчас, ни когда-то там. И не планируется.

Решается через группировки.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39617636
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Прочитал счас что linq не поддерживает outer join )))Может тебе сначала стоит литературку там почитать, учебники, опыт какой-никакой приобрести, а потом уже консультировать на форуме? А то в каждом топике затычка, а толку в каждом из них - ноль.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39617640
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Ну дак я учусь. А ты такой злой потому что запрос не работает?
Решение нашел?
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620222
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
db.Customers
  .Include(n => n.Orders)
  .ThenInclude(n => n.Goods)
  .Where(n => n.Id == id)


Все равно через ж, потому что проекция не работает, точнее сгенерит N*M+1 запрос, но хотя бы можно материализовать и потом спроецировать. Запрос к БД при этом тоже интересно, получается три запроса -
Customers
Orders Inner Join Customers
Goods InnerJoin Orders Inner Join Customers
И фильтр пробрасывается во все три запроса, в результате получается-таки LEFT JOIN.
Ну это хотя бы не N*M+1 запрос.
И группировка не работает.
Да, полное овно.
Я офигел, честно говоря. Был же продукт. Ну пилили бы другой с другим названием с нуля, зачем ломать старый-то, революционеры хреновы.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620227
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt https://github.com/ServiceStack/ServiceStack.OrmLite

Поддерживает Core в полный рост, умеет то, что ты хочешь.Посмотрел овервью, да, похоже вещь сделана для людей и руками, а не жо-ой.

Даже есть SelectFilter на таблицу, то что я руками пилил в своем RepositoryBase поверх EF.

Ты вообще с этой штукой работал, понравилось?

И я правильно понял:
1) Аналога трекера там нет, то есть встроить дополнительную модификацию объектов перед общим сбросом в БД не получится?
2) Про автоматическое изменение схемы БД тоже ничего толком не нашел - все миграции ручками?
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620230
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 и достаточный уровень абстракции, чтобы задействовать типизацию и при этом иметь контроль над данными.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620231
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro1) В EF Core нет ленивой загрузки (!)

Это вообще жесть, один из основных причин, держать его пока подальше от продакшена.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620232
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЯ офигел, честно говоря. Был же продукт. Ну пилили бы другой с другим названием с нуля, зачем ломать старый-то, революционеры хреновы.

Ну чё, нашли фатальный недостаток, нормально :)
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620233
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
var dbFactory = new OrmLiteConnectionFactory(
    ":memory:", SqliteDialect.Provider);
using (IDbConnection db = dbFactory.Open())
{
    db.DropAndCreateTable<Todo>();
    var todo = new Todo
    {
        Content = "Learn OrmLite",
        Order = 1,
    };

    db.Save(todo);

    var savedTodo = db.SingleById<Todo>(todo.Id);
    savedTodo.Content = "Updated";
    db.Save(savedTodo);

    "Updated Todo:".Print();
    db.Select<Todo>(q => q.Content == "Updated").PrintDump();
                
    db.DeleteById<Todo>(savedTodo.Id);

    "No more Todos:".Print();
    db.Select<Todo>().PrintDump();
}
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620239
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttВо-вторых, это редкий случай, когда ORM содержит поддержку DDL, так что можно абстрагироваться от СУБД и писать миграции на более высоком уровне.А можешь пояснить? Тут не догнал.

hVosttНу чё, нашли фатальный недостаток, нормально :)Да ну, тут ты гонишь - его же они сами и писали
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620241
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProhVosttВо-вторых, это редкий случай, когда ORM содержит поддержку DDL, так что можно абстрагироваться от СУБД и писать миграции на более высоком уровне.А можешь пояснить? Тут не догнал.

Ну вот же

Код: c#
1.
db.DropAndCreateTable<Todo>();





оформляешь в миграции, и хранишь как тебе надо, мне кстати нравится как это сделано в EF6
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620243
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А данные?
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620295
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProА данные?

Ну Create/Update... )) Ты же про посев?
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620310
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Не придираясь, исключительно для уточнения наезда на Core:
1) как решил что ленивая не работает?
2) базовую таблицу from не пробовал сменить?
3) запросы сразу к трем таблицам Много ко Много вполне могут допилить позже. Они не каждодневные и больше не к ОРМ идут а к отчетникам и аналитикам.
Imho
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620318
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В тему, смена синтаксиса при переходе на Core с EF6.
https://stackoverflow.com/questions/40319251/using-ef-core-theninclude-on-junction-tables
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620333
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttShocker.ProА данные?

Ну Create/Update... )) Ты же про посев?Я вообще про апгрейды, развертывание в том числе.

Если в EF я просто занимаюсь разработкой могу несколько раз поменять модель и когда пришло время, миграция сгенерилась автоматически, то тут я должен менять модель и сам ручками параллельно делать как миграцию (следя за тем, чтобы она оставалась синхронной с моделью), так и поддерживать версионность схемы БД, если я не работаю напрямую с продакшен базой, а предполагаю, что схема должна обновляться у клиента в автоматическом режиме. Так?
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620339
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro1231) как решил что ленивая не работает? https://docs.microsoft.com/en-us/ef/core/querying/related-data
Petro1232) базовую таблицу from не пробовал сменить??
Petro1233) запросы сразу к трем таблицам Много ко Много вполне могут допилить позже.
Это мне пока не требовалось от Core, с другой стороны, я и не использовал М:М возможности и в EF.NET, создавал таблицу связок вручную.Petro123Они не каждодневные и больше не к ОРМ идут а к отчетникам и аналитикам.Теоретик, блин
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620351
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProPetro1232) базовую таблицу from не пробовал сменить??
Много ко многим: покупатели <--> товары
Так?
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620352
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЕсли в EF я просто занимаюсь разработкой могу несколько раз поменять модель и когда пришло время, миграция сгенерилась автоматически, то тут я должен менять модель и сам ручками параллельно делать как миграцию (следя за тем, чтобы она оставалась синхронной с моделью), так и поддерживать версионность схемы БД, если я не работаю напрямую с продакшен базой, а предполагаю, что схема должна обновляться у клиента в автоматическом режиме. Так?

Всё верно. Все миграции писать ручками, завести служебную таблицу миграций (чтобы поддерживать схему БД), написать механизм миграций.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620353
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProPetro123Они не каждодневные и больше не к ОРМ идут а к отчетникам и аналитикам.Теоретик, блиня сказал общеизвестную вещь....и не обиделся на ответ).
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620381
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Shocker.Proпропущено...
?
Много ко многим: покупатели <--> товары
Так?
Идем далее логически.
Много ко многим решается через промежуточную таблицу. Третью.
Если текст запроса такой: "Дай мне все заказы с тем то тем то", то базовая (твой термин) таблица это from заказы.
Т.е. если результать больше чем строк в Покупатели, то from не на покупателя.
Похожий твой случай?
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620406
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЭто мне пока не требовалось от Core, с другой стороны, я и не использовал М:М возможности и в EF.NET, создавал таблицу связок вручную.
Может в этом все дело. В ручном подходе.
Либо подход DbFirst(как я предпочитаю).
Либо CodeFirst и смотреть что там MS в базе нагенерил.
Что то посередине и руками, ...я бы не.
Зы.
Ссылку посмотрю.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620452
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttВсё верно. Все миграции писать ручками, завести служебную таблицу миграций (чтобы поддерживать схему БД), написать механизм миграций.А где смайлик?
А есть какая-нить ОРМ, которая поддерживает автоматическую генерацию миграций, помимо EF?
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620453
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Все твои сообщения говорят о том, что дальше Hello World с БД, SQL и данными тебе работать не приходилось, так что извини, отвечать на тво бредовые вопросы желания никакого нет. Если ты хотя бы примеры кода приводил, я бы мог указать на твои ошибки, но ты занимаешься просто бла-бла. Было бы пофиг, если бы ты свои флудом не занимал бы больше половины топика, забивая нормальный диалог. Поэтому постарайся просто помолчать, если уж совсем не терпится, напиши код, проверь его, тогда уже можно будет о чем-то говорить.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620467
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Опять бла бла бла.
Твой подход, это linq, а не ОРМ по твоим словам:
авторя и не использовал М:М возможности и в EF.NET, создавал таблицу связок вручную.
Не хочешь развиваться, твое право.
Удачи!
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620712
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProhVosttВсё верно. Все миграции писать ручками, завести служебную таблицу миграций (чтобы поддерживать схему БД), написать механизм миграций.А где смайлик?
А есть какая-нить ОРМ, которая поддерживает автоматическую генерацию миграций, помимо EF?

Зачем смайлик? :)

В текущей системе у нас миграции не просто автоматические, они полностью динамические, таблицы, связи, констрейты, индексы создаются на лету во время исполнения программы, аналитик описывает модели на DDL прям в приложении, это отражается в БД. Мы систему runtime-миграции написали сами, на EF мы бы ничего подобного даже близко не сделали никогда. Поэтому, я серьёзно. Собственные миграции, это айс :)

В общем, смотри сам. Попробуй пожить с EF :) Может сможешь как-то закостылить узкие места до лучших времён. У нас есть маленький проектик на EF Core, ничо, живёт.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620713
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttаналитик описывает модели на DDL

*DML
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620726
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну динамика - это отдельная песня, то понятно.
Но в статике-то хотелось больше сервиса, иначе полностью теряется преимущество CodeFirst и проще использовать DBFirst, чтобы не писать два раза одно и то же.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620737
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProНу динамика - это отдельная песня, то понятно.
Но в статике-то хотелось больше сервиса, иначе полностью теряется преимущество CodeFirst и проще использовать DBFirst, чтобы не писать два раза одно и то же.

Я к тому, что авто-миграции, это конечно хорошо. Но чтоб от них действительно был прям офигенский профит, это надо каждый день вносить кучу изменений или фрилансить на студентов, ну или я не знаю что ещё. Обычно изменения модели не такие частые, чтобы это прям было таким камнем.

Да, удобно, но не более. За день-два можно написать неплохой механизм миграций для своего проекта. Ну и допиливать его по мере необходимости.
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620738
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proи проще использовать DBFirst, чтобы не писать два раза одно и то же.

Ну, возможно... Я уже сто лет как не разрабатываю ПО через БД, это фигня какая-то ))
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620777
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttчерез БД, это фигня какая-то ))а аналитики пишут (РИСУЮТ) Модель в DDL.)))
Неувязочкасс)).
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620789
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123hVosttчерез БД, это фигня какая-то ))а аналитики пишут (РИСУЮТ) Модель в DDL.)))
Неувязочкасс)).Мальчик-писатель-не-читатель!
угомонись уже
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39620800
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Тебя плохо воспитывали? К другим приставать?
...
Рейтинг: 0 / 0
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
    #39621341
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123а аналитики пишут (РИСУЮТ) Модель в DDL.)))
Неувязочкасс)).

Ну зависит от степени автоматизации. В допотопных конторах пусть аналитики фигачат DDL ))
...
Рейтинг: 0 / 0
65 сообщений из 65, показаны все 3 страниц
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]