Не то чтобы я это знал, но не так уж и сложно определить собственный EAV, это всего лишь 3 таблицы:)
- Объект сохраняет имя связанной таблицы.
- Атрибут хранит имя столбца, тип данных и может ли он иметь значение NULL.
- Значение содержит по одному столбцу NULL для каждого необходимого типа данных.
Entity 1 .. * Атрибут 1 ..* Значения
Предполагая, что вы используете .NET, определите свои интерфейсы EAV, создайте несколько POCO и позвольте Entity Framework или вашему ORM по вашему выбору соединить ассоциации для вас.LINQ отлично работает для такого рода операций.
Он также позволяет создавать гибридную модель, в которой части схемы известны, но вам все еще нужна гибкость для пользовательских данных.Если вы разрабатываете свою модель предметной области с учетом этого (т.е. используете интерфейсы EAV в своей модели), EAV может быть встроен в контекст данных EF (или любой другой), чтобы автоматизировать загрузку атрибутов и их значений для каждой сущности.Ваша сущность EF просто должна знать, к какой сущности таблицы она принадлежит.
Конечно, это не идеальное решение, так как вы (потенциально) торгуете ради гибкости.В зависимости от объема данных, которые вы хотите сохранить, и требований к производительности, он может больше подходить для моделей, в которых известна большая часть схемы, а меньший процент неизвестен.YMMV.