Базовый тип запроса Entity Framework не отображает результаты на объект - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь выполнить SQL-запрос, используя новые функции DBQuery в Entity Framework Core 2.1.В моей модели есть объект, который выглядит примерно так:

public class Ord
{
    public Guid Id {get; set;}
    public Guid ColumnOne {get; set;}
    public Guid ColumnTwo {get; set;}
}

Я создал объект с именем TestQuery, который выглядит следующим образом:

public class TestQuery
{
    public Ord PatientOrder {get; set;}
}

Я добавил новыйDBQuery в мой класс контекста базы данных, например:

public DbQuery<TestQuery> TestQuery { get; set; }

Затем я пытаюсь выполнить запрос, используя FromSql, например, так:

var query = "select PatientOrder.Id as PatientOrderId,
                    PatientOrder.ColumnOne as PatientOrderColumnOne,
                    PatientOrder.ColumnTwo as PatientOrderColumnTwo
             from Ord PatientOrder"

var test = await _context.TestQuery.FromSql(query).ToListAsync();

Список test имеетточное количество результатов, которые я ожидаю.Однако каждый объект TestQuery просто имеет нулевое свойство PatientOrder.Таким образом, кажется, что запрос выполняется и возвращает результаты, но не отображает результаты в свойстве PatientOrder.

Есть ли шаг, который я пропускаю, чтобы эти данные правильно отображались на моем объекте?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Вы не можете делать в точности то, что делаете согласно документации:

Выдержка:

Запрос SQL не может содержать связанные данные.Однако во многих случаях вы можете создавать поверх запроса, используя оператор Include для возврата связанных данных (см. Включение связанных данных).

Следующие данные связаны:

public Ord PatientOrder {get; set;}
0 голосов
/ 22 февраля 2019

Если вы делаете запрос к TestQuery, который имеет связанные данные PatientOrder, вы должны использовать Include.

https://docs.microsoft.com/en-us/ef/core/querying/raw-sql#including-related-data

var query = "/* do your query, but include the PatientOrderId */";
var test = await _context.TestQuery.FromSql(query).Include(t=>t.PatientOrder).ToListAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...