Кажется, я не могу найти ответы на вопрос "как использовать EAV-подход с инструментами ORM", поэтому я попробую удачу здесь.
Предположим, что у меня есть таблица Entities
:
ID -> int
Name -> nvarchar(50)
An Images
Таблица:
EntityID -> int
Width -> int
Height -> int
И a Songs
Таблица:
EntityID -> int
Duration -> decimal(12,3)
Мне нужно добавить расширяемые метаданные к сущностям (неизвестные пары "ключ-значение" с информацией о типе), так что я могу задавать такие запросы, как:
Найдите мне все Песни с Duration
длиной более 3 минут с Name
, начиная с "The", с метаданными, удовлетворяющими этим критериям:
-
HasGuitarSolo
установлено значение true -
GuitarSoloDuration
больше 30 секунд
И отсортируйте результаты на GuitarSoloDuration
в порядке убывания.
Я не хочу создавать столбцы HasGuitarSolo
, GuitarSoloDuration
и т.д. в базе данных. В идеале я хотел бы хранить их в EAV-подобной схеме или альтернативной схеме, которая не требует знания клавиш вверх.