powered by simpleCommunicator - 2.0.33     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
14 сообщений из 14, страница 1 из 1
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
    #39929300
ValGer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо сделать сложный многотабличный запрос. LINQ здесь подходит плохо. Раньше (до Core) я это делал "левой ногой" (см. заголовок) и всё прекрасно работало. Теперь в Core это куда-то делось. Предлагаются другие методы, но как я понял оперирущими с однотабличными запросами, которая (таблица) к тому же должна присутствовать в базе данных. Это понятно, неосуществимо для сложных многотабличных запросов. Примеры здесь: https://metanit.com/sharp/entityframeworkcore/6.1.php В предыдущем варианте указывать на присутствующую в БД таблицу необходимости не было, то есть в *.SqlQuery<Класс>(...) класс, отвечающий запросу, мог быть произвольным (но, естественно, созданным и присутствующим заранее).
Как быть?
С уважением ВВГ
...
Рейтинг: 0 / 0
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
    #39929335
ValGer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValGer,
Да! Сейчас погуглил по этому поводу - народ матерится по поводу исчезновения .SqlQuery и замене на расширение и обобщения без внятного описания и примеров.
...
Рейтинг: 0 / 0
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
    #39929432
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValGer, использовать другой маппер? Dapper?
...
Рейтинг: 0 / 0
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
    #39929443
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValGer, ну и в обсуждениях есть всякие костылики... если уж EF Core уперся... https://github.com/dotnet/efcore/issues/1862
...
Рейтинг: 0 / 0
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
    #39929463
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValGer
Надо сделать сложный многотабличный запрос. LINQ здесь подходит плохо.

"Сложный многотабличный запрос" обычно говорит о корявой модели. И если ты сейчас и решишь свою проблему, то потом, наверняка, все равно получишь проблемы с производительностью и все равно будешь модель перекраивать.
...
Рейтинг: 0 / 0
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
    #39929680
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, никуда оно не делось. Надо просто класс на который ты мепишь результат запроса включить в модель.
Достаточно написать:
Код: c#
1.
2.
3.
4.
5.
6.
protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    builder.Entity<Foo>();
    // ниже все остальное
}


и потом можно:
Код: c#
1.
dbContext.Set<Foo>().FromRawSql("select ....");


Таблицу для Foo в БД при этом создавать совсем не нужно. Единственная засада тут может быть, что если CF с использованием миграций, то для этого класса сгенерится создание таблицы. Можно обойти пошаманив с миграциями руками.
...
Рейтинг: 0 / 0
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
    #39929784
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat, рискну предположить, что автор так dto'шки делает для вьюшек... там по ссылки был вариант с созданием налету временного контекста
...
Рейтинг: 0 / 0
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
    #39929818
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser,

Вьюхи теперь поддерживаются в EF.

Вообще пока не понятно в чём проблема.
Задача выполнить любой запрос выполнима.
Но в контексте EF выполнение запроса не применительно к сущностям не имеет никакой практической ценности.
...
Рейтинг: 0 / 0
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
    #39930410
ValGer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
ValGer
Надо сделать сложный многотабличный запрос. LINQ здесь подходит плохо.

"Сложный многотабличный запрос" обычно говорит о корявой модели. И если ты сейчас и решишь свою проблему, то потом, наверняка, все равно получишь проблемы с производительностью и все равно будешь модель перекраивать.


Ничего корявого я базе не вижу - база крохотная (~50 000 записей) и в локальной сети (~50 компьютеров) работает аж 1998 года прекрасно ( с небольшими текущими полировками время от времени). Просто сейчас нужно перетащить пользовательский интерфейс из локальной сети в интернет. Сложность запросов полностью определяется сложностью отчётов и тут никуда не деться.
...
Рейтинг: 0 / 0
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
    #39930433
ValGer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Кстати, никуда оно не делось. Надо просто класс на который ты мепишь результат запроса включить в модель.
Достаточно написать:
Код: c#
1.
2.
3.
4.
5.
6.
protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    builder.Entity<Foo>();
    // ниже все остальное
}


и потом можно:
Код: c#
1.
dbContext.Set<Foo>().FromRawSql("select ....");


Таблицу для Foo в БД при этом создавать совсем не нужно. Единственная засада тут может быть, что если CF с использованием миграций, то для этого класса сгенерится создание таблицы. Можно обойти пошаманив с миграциями руками.


Не понял, что значит "// ниже всё остальное"
Вот фрагмент того, что генерит EF для базы:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<KKursi>(entity =>
            {
                entity.HasKey(e => e.НомерКурсов);

                entity.ToTable("K_KURSI");

                entity.Property(e => e.ДатаНачалаКурсов).HasColumnType("datetime");
.....................................................................................................................



В таком духе и для результатов запроса нужно что-ли?
Примерчик, хотя бы для двухстолбцовой таблички, не могли бы привести или отослать туда, где он имеется.
С уважением ВВГ
...
Рейтинг: 0 / 0
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
    #39930518
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValGer
Сложность запросов полностью определяется сложностью отчётов и тут никуда не деться.

О том и речь... Т.е. это не кривь, возможно, что под репортинг нужно (придется) данные "готовить" отдельно...
...
Рейтинг: 0 / 0
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
    #39930519
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
    #39930526
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValGer
Ничего корявого я базе не вижу - база крохотная (~50 000 записей) и в локальной сети (~50 компьютеров) работает аж 1998 года прекрасно ( с небольшими текущими полировками время от времени). Просто сейчас нужно перетащить пользовательский интерфейс из локальной сети в интернет. Сложность запросов полностью определяется сложностью отчётов и тут никуда не деться.


Короч, вот вам серебряная пуля.
Засовывайте свои сложные многотабличные запросы во вьюхи, и мапьте на сущности этих вьюх в EF.
Работайте с ними как с обычными таблицами, очень просто.

И вот же: https://docs.microsoft.com/ru-ru/ef/core/modeling/keyless-entity-types

и вообще читайте уже доку, там же не 7-томник Доналда Кнута,
ну плёвый вопрос.

Там-раньше вот... это самое.. было.
А потом.. вот это вот,.. всё пропало.
Чё делать?

Всё в доке расписано )
...
Рейтинг: 0 / 0
Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
    #39931982
ValGer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValGer,

Фу-у-у-у! Продравшись скозь гору маловразумительной информации, удалось, наконец, понять как реализовать любой SQL-запрос в EFC. В принципе, "те же яйца, только в профиль". Ранее мы гнали всё в типизированнный список List<Некоторый-класс>, причём этот класс описывали где-то в произвольном месте программы. Теперь необходимо описать этот же класс (теперь он называется типом запроса/сущности - см. https://entityframeworkcore.com/ru/knowledge-base/50402015/ ), но с существенным отличием - он не может располагаться где угодно, а обязательно должен присутствовать в контексте базы данных. Поместить это в контекст несложно, поскольку этот класс(контекста) имеет атрибут "partial". А далее, да здравствует метод *.FromSqlRaw(...):

var t = db.<Класс-типа-сущности>.FromSqlRaw(queryString).ToList();

db - контекст базы
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Куда делось в EF Core: var comps = db.Database.SqlQuery<...>(Строка-запроса) и как быть?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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