Как получить сущность со связанными сущностями в ядре net с необработанными запросами SQL? - PullRequest
0 голосов
/ 30 января 2020

У меня есть следующие модели, Visit.cs и Prescription.cs. Я хочу получить все строки посещения с каждым экземпляром, содержащим соответствующие рецепты. Я использую следующий запрос EF Core, но поле medicines всегда пусто. Я использую postgresql в качестве базы данных. Что мне делать?

Visit.cs:

public class Visit
{
    public int patient_id { get; set; }
    public DateTime visit_date { get; set; }
    public int doctor_id { get; set; }
    public int prescription_id { get; set; }

    public ICollection<Prescription> prescriptions { get; set; }
}

Prescription.cs:

public class Prescription
{
    public int prescription_id { get; set; }
    public string medicine { get; set; }
    public Visit Visit { get; set; }
}

и мой запрос:

var visits = dbContext.Visits
                      .FromSqlRaw("select * from visit natural join prescription")
                      .ToList();

1 Ответ

2 голосов
/ 30 января 2020

В документации для .FromSqlRaw это упоминается в разделе ограничений

. Они дают пример того, как включает связанные данные однако, составив необработанный запрос:

var visits = dbContext.Visits
  .FromSqlRaw("select * from visit")
  .Include(v=>v.prescriptions)
  .ToList();

, я также настоятельно рекомендую вам НЕ использовать * в любом запросе. Перечислите столбцы, которые вам нужно вернуть. Использование * заставит базу данных вернуть все столбцы, даже те, которые вам не нужны. Принуждение базы данных к возврату неиспользуемых столбцов может привести к тому, что она не будет использовать индексы, которые она могла бы использовать в противном случае, или к тому, что база данных выполнит поиск строк, что на самом деле не нужно делать. Хорошим примером может служить DBA, добавляющий столбцы для таких вещей, как CreateDate, UpdateDate, CreateUser, UpdateUser и / или RowVersion, чтобы помочь с отслеживанием изменений или репликацией.

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