|
EF Core 5 Multiple relations
|
|||
---|---|---|---|
#18+
Добрый день. Есть MSSQL БД под системой Navision (она ей рулит). Физических FK в БД нет, они все на уровне приложения Navision. Есть такая структура таблиц (Из коробки от самого Microsoft): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
В поле [Document No_] таблицы [Company$Item Ledger Entry] могут лежать значения [No_] как из [Company$Purch_ Rcpt_ Header], так и из [Company$Sales Shipment Header] (Всего 15 таблиц). Поле [Document Type] по сути обозначает какой номер документа из какой таблицы там лежит. Поэтому справедлив запрос.. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Есть ли возможность используя навигации воссоздать такой запрос через Include/ThenInclude. Хотя бы для одного LEFT JOIN. Воссоздать LEFT JOIN у меня получилось (при этом логически гарантируется, что номера документов уникальные в системе (но это всего лишь настройки)), а вот чтобы автоматически да и даже в запросе дополнительно указать Document Type для левого соединения не получается Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Суть, чтобы была возможность использовать трекинг объектов, и при этом иметь условные связи. Что-то вроде этого: Код: c# 1.
Или по другому нужен условный Include/ThenInclude но не на коллекцию, а на объект Как это сделать через SelectMany подставляя DBSet<> понятно (и то, там генерируется OUTER APPLY вместо LEFT JOIN, но на результат это не влияет), но на выходе будет совсем не исходный DBSet<> ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2021, 18:05 |
|
EF Core 5 Multiple relations
|
|||
---|---|---|---|
#18+
Если через навигационные свойства не получается сделать запрос, можно попробовать описать джойны напрямую. Благо EF это позволяет. Complex Query Operators , Perform custom join operations . Вообще, EF (Core) весьма убог в плане составления сложных запросов. Вот здесь: EF Core Tools & Extensions - можно поискать дополнения, которые добавят ему мощи. Судя по описанию, ELinq позволяет писать запросы как в SQL. Но с этой либой я никогда не работал, поэтому ничего по ней не скажу. Зато могу посоветовать linq2db.EntityFrameworkCore . Примеры разных джойнов: Joins . Если последние примеры заинтересуют, то я бы посоветовал выкинуть EF и взять ORM linq2db. Но почему-то такое предложение всегда вызывает отторжение... Странно: никто не возражает против подключения дополнительных библиотек, например, для парсинга форматов наподобие json, yaml, csv, для графических компонентов, для всяких REST и SOAP-клиентов, а вот как предложишь доп либу для ORM - сразу паника. Из моего личного опыта... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2021, 18:51 |
|
|
start [/forum/topic.php?fid=17&tid=1349023]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
385ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 231ms |
total: | 716ms |
0 / 0 |