Как использовать свободный синтаксис для нескольких представлений - PullRequest
0 голосов
/ 28 июня 2018

Следующая инструкция возвращает объект «BestAddress» из представления demov_sel_best_address SQL Server. Он также вернет сущность Person владельца адреса. Работает нормально.

_ctx.BestAddresses.FromSql($"select * from [demo].[demov_sel_best_address] addr where addr.PersonID = 1") .Include(x => x.People).FirstOrDefault();

Как переписать заявление на:

а. Получить человека первым. Что-то вроде:

_ctx.People .Include(x => x.BestAddress.FromSql($"select * from [demo].[demov_sel_best_address]") .where(x => x.PersonID == 1)

б. Присоединяйтесь 2 просмотра. Что-то вроде:

_ctx.People.FromSql($"select * from [demo].[demov_sel_people] p") .Include(x => x.BestAddress.FromSql($"select * from [demo].[demov_sel_best_address]") .where(x => x.PersonID == 1)

Я использую следующее:

EF Core 2.0.0 VS 2017 SQL Server 2016

1 Ответ

0 голосов
/ 21 сентября 2018

EF Core может обрабатывать представления точно так же, как таблицы, если они настроены таким образом. Чтобы настроить представление в виде таблицы:

  1. Определите модель данных, которая соответствует столбцам, возвращаемым из представления.

    публичный класс BestAddress { [Key] public int ID {get; задавать; }

    public string Addr1 { get; set; }
    
    public string Addr2 { get; set; }
    
    etc...
    
    //Add navigation to join to other Entities.
    public int PersonID { get; set; }
    public Person Person { get; set; }
    
    etc... 
    
  2. Сопоставьте сущность с вашим видом, используя что-то вроде:

    [Таблица ("demov_sel_best_address", схема = "демо")]

    открытый класс BestAddress

    [Key] public int ID {get; задавать; }

    и т.д ...

  3. Добавить сущность в контекст.

    public DbSet BestAddresses {get; задавать; }

  4. Теперь вы можете написать Linq для объекта:

        var query = _ctx
            .BestAddresses
            .AsNoTracking()
            .Where(x => x.ID == id)
        etc...
    
  5. Сущность может быть включена в состав других сущностей:

    [Таблица («Люди», схема = «демо»)]

    человек публичного класса { [Key] public int ID {get; задавать; }

    public int BestAddressID{ get; set; }
    public BestAddress BestAddress{ get; set; }
    

Теперь представление может быть включено в обычный синтаксис Linq:

_ctx.People
.Include(x => x.BestAddress)
.where(x => x.ID == 1)

Другие виды могут быть добавлены с использованием той же техники. Затем они могут быть объединены, используя ту же технику.

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