У меня в базе есть следующая схема:
- BillingReferences (ReferencingType tinyint, ReferencingId tinyint, ReferencedType tinyint, ReferencedId tinyint, IsActive bit) - где все поля (кроме IsActive) являются частью уникального индекса.
- BillingType (BillingTypeId tinyint, имя varchar (50))
ReferencingType и ReferencedType - это внешний ключ BillingTypes. BillingTypes содержит следующие строки:
BillingTypeId | Имя
1 | Этикетки
2 | Страны
3 | PaymentProviders
4 | Варианты оплаты
5 | банки
ReferecingId и ReferencedId представляют собой идентификатор одной из следующих сущностей (зависит от типа ссылки / ссылки):
- Банки (BankId tinyint, имя varchar (50))
- Страны (CountryId tinyint, имя varchar (50))
- Ярлыки (LabelId tinyint, имя varchar (50))
- PaymentProviders (PaymentProviderId tinyint, имя varchar (50))
- PaymentOptions (PaymentOptionId tinyint, имя varchar (50))
В будущем к каждой сущности будет добавлено еще несколько разных столбцов, но пока это схема для простоты.
Между всеми объектами (кроме стран) и странами существует связь (1- ). Ярлыки имеют связь (1-) с банками, поставщиками платежей и опциями оплаты. И у PaymentProvider есть соединение (1- *) с PaymentProvider.
Так, например, если я хочу подключить банк с BankId 201 к стране с CountryId 3003, у меня будет запись в BillingReferences, которая будет выглядеть так: ReferencingType = 5 ReferencingId = 201 ReferencedType = 2 ReferencedId = 3003 IsActive = 1
Мы не создали таблицу соединений / ссылок для каждого типа соединения из соображений расширяемости. Если мы хотим добавить еще одну сущность, все, что нам нужно сделать, это добавить ее таблицу и добавить записи для нее в BillingReferences и BillingType.
Проблема в том, что я не могу настроить условный внешний ключ между BillingReferences и каждым из объектов, и я не могу настроить / сопоставить его с EntityFramework ...
Мне не удалось найти ни одного учебника или примера, в котором используется этот тип реализации. Обязан ли я создавать справочную таблицу для каждого подключения или есть способ настроить это с помощью EntityFramework?
Спасибо за помощь :)