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