EF Core 2.2.6 - сопоставление сущности или запроса с оператором SQL (я не хочу создавать представление) - PullRequest
1 голос
/ 03 октября 2019

Я действительно надеюсь, что это не дубликат, я прочитал десятки связанных / похожих вопросов.

Я создаю DbContext только для чтения, во-первых, уверен, что это возможно, я создал DbSets и попыталсянастроить их для сопоставления с оператором SQL, я думал, что делал это в прошлом, но, похоже, я ошибаюсь.

Поэтому я изменил стратегию и решил изменить все DbSets на DbQuery. После этого я был действительно счастлив, потому что это действительно отражает природу DbContext, он читается только как Query, но не как DbSet.

Так что теперь с DbQuery я могу:

  1. Использование ToView для сопоставления запроса с представлением в базе данных
  2. Использование ToQuery для извлечения данных посредством запроса существующих сущностей в контексте

Это ограничение для меня,Я не хочу создавать представления и не хочу отображать все объекты в контексте, есть ли для меня альтернативное решение?

Код для случая 1:

protected override void OnModelCreating(ModelBuilder modelBuilder) {
    modelBuilder.Query<MyEntity>().ToView("my-view-name");

[...]

Код для случая 2:

public virtual DbSet<MyEntity> MyEntities { get; set; }
public virtual DbSet<MyEntity2> MyEntity2s { get; set; }
public virtual DbSet<MyEntity3> MyEntity3s { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder) {
    modelBuilder.Query<MyEntity>().ToQuery(() => MyEntity2.Include(MyEntity3).Select(me2 => new MyEntity(me2.Property1, me2.Property2, me2.MyEntity3.Property1 ....) );

[...]

1 Ответ

0 голосов
/ 03 октября 2019

Единственный способ, который я нашел, как показано ниже:

public virtual DbQuery<MyEntity> MyEntities { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder) {
    const string SQL = "SELECT whatever FROM wherever";
    modelBuilder.Query<MyEntity>().ToQuery(() => MyEntities .FromSql(SQL).AsQueryable());

[...]

Для меня это выглядит ужасно, это работает, но я твердо верю, что это не правильный путь. DbQuery MyEntities используется в своей собственной конфигурации, как собака, кусающая свой хвост. Кроме того, я не думаю, что у меня может быть конфигурация в отдельном файле, как для отображения сущностей, но мне нужно подробнее изучить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...