Правильный способ обработки типов запросов EF Core 2.x внутри классов сущностей - PullRequest
0 голосов
/ 28 мая 2020

У нас есть проект, в котором мы работаем с базой данных Oracle, поэтому в настоящее время мы должны использовать EF Core 2.x, поскольку Oracle еще не выпустил поставщика EF Core 3.x.

У нас есть 2 стола. Один находится в одной схеме, а другой - в другой:

  • ValidRTO
  • CapSubmissionLog

ValidRTO может быть назначен одному или нескольким объектам CapSubmissionLog. Сущность CapSubmissionLog должна быть назначена одному и только одному ValidRTO.

Вот как классы определены для каждого (я удалил ненужную информацию, чтобы она была краткой): VALID_RTO_VIEW, который является представлением таблицы VALID_RTO в схеме A и только для чтения из схемы B:

[Table("VALID_RTO_VIEW")]
public partial class ValidRto
{
     [Column("RTO_ID")]
     public int RtoId { get; set; }
     [Column("RTO_NAME")]
     public string RtoName { get; set; }
     [Column("RTO_DESCRIPTION")
     public string RtoDescription { get; set; }
}

CAP_SUBMISSION_LOG - это таблица в схеме B, которая будет ссылаться на VALID_RTO_VIEW в схеме A. Это представление читается только в схеме B, но CAP_SUBMISSION_LOG читается /write.

[TABLE("CAP_SUBMISSION_LOG")]
public partial class CapSubmissionLog
{
     [Column("BATCH_ID")]
     public int BatchId { get; set; }
     [Column("USER_ID", TypeName = "CHAR(8)")]
     public string UserId; { get; set; }
     [Column("RTO_ID")]
     public int? RtoId { get; set; }
}

Я знаю, как зарегистрировать эти два объекта в DbContext. ValidRto будет DbQuery и, конечно, CapSubmissionLog будет DbSet.

Как правильно смоделировать это, чтобы при запросе из представления ValidRto я также мог получить все объекты CapSubmissionLog, назначенные этому ValidRto ? Это делается вне объекта ValidRto или есть способ создать свойство в ValidRto, которое может сделать это за нас? Это вообще правильный способ его смоделировать? Поскольку ValidRto на самом деле является принципом в этих «отношениях», я знаю, что по требованиям EF это запрещено. Так, может быть, это ответ на мой вопрос? Я не могу настроить свойство в ValidRto для его извлечения, и мне пришлось бы делать это за пределами объекта?

То же самое и с CapSubmissionLog, который должен быть назначен одному и только одному экземпляру ValidRto. Как мне настроить свойство навигации в CapSubmissionLog для извлечения этой информации, или это снова невозможно и должно быть сделано вне класса сущности CapSubmissionLog? Опять же, поскольку CapSubmissionLog - это , а не принцип в отношении, это не может быть сделано внутри класса? Опять же, как правильно это сделать?

Кажется, я не могу найти никаких примеров того, как это сделать, и, возможно, потому, что это неправильный способ справиться с этим? Но таблица ValidRto не контролируется нашим приложением и доступна только для чтения этому приложению, поэтому мы используем ее в качестве представления.

Спасибо!

...