У меня есть база данных MS SQL 2008, и я не могу изменить ее схему. Я должен работать с тем, что есть.
В нем три таблицы, которые имеют отношение к вопросу.
Таблица продуктов. Столбцы:
- Id (личность, ПК)
- Группа (НЕ НУЛЬ)
- Подгруппа (НЕ NULL)
- Код (Уникальный, НЕ НУЛЬ)
- Описание
Договорная таблица. Столбцы:
- Идентификатор (личность, ПК)
- Код (НЕ НУЛЬ)
- 1028 *! Описание *
Таблица скидок. Столбцы:
- Id (личность, ПК)
- Тип (ограничено одним из четырех значений:
- 'продукт',
- 'группы',
- «подгруппа» или
- 'контракт') (НЕ NULL)
- Объект (в зависимости от значения типа относится к одному из четырех:
- Product.Code
- Product.Group
- Product.SubGroup
- Contract.Code) (НЕ NULL)
- Значение (НЕ NULL)
Идея заключается в том, что скидка может быть применена к любому из четырех. Я хотел бы повторить, что это дизайн базы данных, который я не могу изменить.
С Entity Framework я могу нормально запрашивать таблицы с помощью объединений, но я не могу использовать свойства навигации "из коробки", потому что свойства навигации генерируются на основе отношений внешнего ключа из базы данных, и вы не можете определить "условный" отношения в MS SQL, где объект поля относится к одной таблице, когда тип поля содержит это значение, и относится к другой таблице, когда значение отличается.
У меня такой вопрос: возможно ли определить классы и сопоставления с помощью Entity Framework, чтобы я мог использовать свойства навигации в этом сценарии? Например, я делаю Discount.Object и в ответ получаю либо объект Contract, либо объект Product, и, если это объект Product, он извлекается в правильном свойстве.
Возможно ли это, или что-то подобное, или соединения - лучшее, что я могу сделать?