У нас есть проект, в котором мы работаем с базой данных 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 не контролируется нашим приложением и доступна только для чтения этому приложению, поэтому мы используем ее в качестве представления.
Спасибо!