|
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
|
|||
---|---|---|---|
#18+
Надо сделать сложный многотабличный запрос. LINQ здесь подходит плохо. Раньше (до Core) я это делал "левой ногой" (см. заголовок) и всё прекрасно работало. Теперь в Core это куда-то делось. Предлагаются другие методы, но как я понял оперирущими с однотабличными запросами, которая (таблица) к тому же должна присутствовать в базе данных. Это понятно, неосуществимо для сложных многотабличных запросов. Примеры здесь: https://metanit.com/sharp/entityframeworkcore/6.1.php В предыдущем варианте указывать на присутствующую в БД таблицу необходимости не было, то есть в *.SqlQuery<Класс>(...) класс, отвечающий запросу, мог быть произвольным (но, естественно, созданным и присутствующим заранее). Как быть? С уважением ВВГ ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 09:57 |
|
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
|
|||
---|---|---|---|
#18+
ValGer, Да! Сейчас погуглил по этому поводу - народ матерится по поводу исчезновения .SqlQuery и замене на расширение и обобщения без внятного описания и примеров. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 10:49 |
|
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
|
|||
---|---|---|---|
#18+
ValGer, использовать другой маппер? Dapper? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 13:07 |
|
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
|
|||
---|---|---|---|
#18+
ValGer, ну и в обсуждениях есть всякие костылики... если уж EF Core уперся... https://github.com/dotnet/efcore/issues/1862 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 13:21 |
|
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
|
|||
---|---|---|---|
#18+
ValGer Надо сделать сложный многотабличный запрос. LINQ здесь подходит плохо. "Сложный многотабличный запрос" обычно говорит о корявой модели. И если ты сейчас и решишь свою проблему, то потом, наверняка, все равно получишь проблемы с производительностью и все равно будешь модель перекраивать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 13:56 |
|
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
|
|||
---|---|---|---|
#18+
Кстати, никуда оно не делось. Надо просто класс на который ты мепишь результат запроса включить в модель. Достаточно написать: Код: c# 1. 2. 3. 4. 5. 6.
и потом можно: Код: c# 1.
Таблицу для Foo в БД при этом создавать совсем не нужно. Единственная засада тут может быть, что если CF с использованием миграций, то для этого класса сгенерится создание таблицы. Можно обойти пошаманив с миграциями руками. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 23:06 |
|
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
|
|||
---|---|---|---|
#18+
fkthat, рискну предположить, что автор так dto'шки делает для вьюшек... там по ссылки был вариант с созданием налету временного контекста ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2020, 16:59 |
|
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
|
|||
---|---|---|---|
#18+
buser, Вьюхи теперь поддерживаются в EF. Вообще пока не понятно в чём проблема. Задача выполнить любой запрос выполнима. Но в контексте EF выполнение запроса не применительно к сущностям не имеет никакой практической ценности. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2020, 18:42 |
|
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
|
|||
---|---|---|---|
#18+
fkthat ValGer Надо сделать сложный многотабличный запрос. LINQ здесь подходит плохо. "Сложный многотабличный запрос" обычно говорит о корявой модели. И если ты сейчас и решишь свою проблему, то потом, наверняка, все равно получишь проблемы с производительностью и все равно будешь модель перекраивать. Ничего корявого я базе не вижу - база крохотная (~50 000 записей) и в локальной сети (~50 компьютеров) работает аж 1998 года прекрасно ( с небольшими текущими полировками время от времени). Просто сейчас нужно перетащить пользовательский интерфейс из локальной сети в интернет. Сложность запросов полностью определяется сложностью отчётов и тут никуда не деться. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2020, 09:33 |
|
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
|
|||
---|---|---|---|
#18+
fkthat Кстати, никуда оно не делось. Надо просто класс на который ты мепишь результат запроса включить в модель. Достаточно написать: Код: c# 1. 2. 3. 4. 5. 6.
и потом можно: Код: c# 1.
Таблицу для Foo в БД при этом создавать совсем не нужно. Единственная засада тут может быть, что если CF с использованием миграций, то для этого класса сгенерится создание таблицы. Можно обойти пошаманив с миграциями руками. Не понял, что значит "// ниже всё остальное" Вот фрагмент того, что генерит EF для базы: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
В таком духе и для результатов запроса нужно что-ли? Примерчик, хотя бы для двухстолбцовой таблички, не могли бы привести или отослать туда, где он имеется. С уважением ВВГ ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2020, 10:13 |
|
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
|
|||
---|---|---|---|
#18+
ValGer Сложность запросов полностью определяется сложностью отчётов и тут никуда не деться. О том и речь... Т.е. это не кривь, возможно, что под репортинг нужно (придется) данные "готовить" отдельно... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2020, 12:25 |
|
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2020, 12:26 |
|
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
|
|||
---|---|---|---|
#18+
ValGer Ничего корявого я базе не вижу - база крохотная (~50 000 записей) и в локальной сети (~50 компьютеров) работает аж 1998 года прекрасно ( с небольшими текущими полировками время от времени). Просто сейчас нужно перетащить пользовательский интерфейс из локальной сети в интернет. Сложность запросов полностью определяется сложностью отчётов и тут никуда не деться. Короч, вот вам серебряная пуля. Засовывайте свои сложные многотабличные запросы во вьюхи, и мапьте на сущности этих вьюх в EF. Работайте с ними как с обычными таблицами, очень просто. И вот же: https://docs.microsoft.com/ru-ru/ef/core/modeling/keyless-entity-types и вообще читайте уже доку, там же не 7-томник Доналда Кнута, ну плёвый вопрос. Там-раньше вот... это самое.. было. А потом.. вот это вот,.. всё пропало. Чё делать? Всё в доке расписано ) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2020, 12:33 |
|
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
|
|||
---|---|---|---|
#18+
ValGer, Фу-у-у-у! Продравшись скозь гору маловразумительной информации, удалось, наконец, понять как реализовать любой SQL-запрос в EFC. В принципе, "те же яйца, только в профиль". Ранее мы гнали всё в типизированнный список List<Некоторый-класс>, причём этот класс описывали где-то в произвольном месте программы. Теперь необходимо описать этот же класс (теперь он называется типом запроса/сущности - см. https://entityframeworkcore.com/ru/knowledge-base/50402015/ ), но с существенным отличием - он не может располагаться где угодно, а обязательно должен присутствовать в контексте базы данных. Поместить это в контекст несложно, поскольку этот класс(контекста) имеет атрибут "partial". А далее, да здравствует метод *.FromSqlRaw(...): var t = db.<Класс-типа-сущности>.FromSqlRaw(queryString).ToList(); db - контекст базы ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 21:00 |
|
|
start [/forum/topic.php?fid=17&fpage=2&tid=1349079]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 136ms |
0 / 0 |