Функциональность, эквивалентная EF Core 3 DbQuery

В ef core 2.2 я использовал DbQuery для сопоставления необработанных результатов sql с объектом следующим образом:

public partial class AppDbContext{
    public DbQuery<SimpleQueryModel> SimpleQM {get;set;}
}

а потом

var result=_dbContext.SimpleQM.FromSql(sqlString,params);

это не создаст дополнительную таблицу и будет работать нормально. В ef core 3.1 DbQuery устарел и говорит мне использовать вместо него DbSet без ключа. Я настроил его следующим образом:

public partial class AppDbContext{
    public DbSet<SimpleQueryModel> SimpleQM {get;set;}
}

и в ModelCreating

builder.Entity<SimpleQueryModel>().HasNoKey();

но это создаст новую таблицу в новой миграции БД, и если я скажу ef игнорировать этот объект, как показано ниже

builder.Entity<SimpleQueryModel>().HasNoKey().Ignore();

Я не могу использовать _dbContext.SimpleQM.FromSqlRaw();, это вызовет исключение и сообщит, что модель не включена в контекст. как я могу добиться такой же функциональности в ef core 3.1?


person Reza Ebadi    schedule 20.12.2019    source источник


Ответы (1)


Задача решена! просто использовал эту конфигурацию.

builder.Entity<SimpleQueryModel>().HasNoKey().ToView("view_name_that_doesnt_exist");
person Reza Ebadi    schedule 20.12.2019
comment
Некрасиво, но работает. Головоломка, что они решили не поддерживать это разумным образом. - person James Hancock; 24.01.2020
comment
@JamesHancock, не обязательно уродливый, это аналогичный способ (если не точный) ухаживать за обычным набором. И это согласно github.com/dotnet/efcore/issues/14194 - цитируется : Мы представили типы запросов в 2.1 как типы, для которых не определен первичный ключ. Однако все больше и больше кажется, что это должны быть просто типы сущностей без определенных первичных ключей. Это не означает, что они будут вести себя по-разному, просто они будут представлены типами сущностей и называться ими. - person Gerard Jaryczewski; 22.12.2020
comment
Кстати, это очень похоже на то, как мы относимся к представлениям в мире баз данных. Представления - это наборы, в конце дня их можно объединять и рассчитывать таким же образом, только определение источника немного отличается. Может не немного, но .. только ;-) - person Gerard Jaryczewski; 22.12.2020