Построение модели OData EF с динамической структурой данных

Можно ли создать модель EF на основе динамической структуры? Например, у меня есть Клиент, который может иметь настраиваемые поля, определенные администратором системы. Исходя из этого, изменяется таблица пользовательских полей, связанных с клиентом, и добавляется новый столбец для нового определенного поля.

Есть ли возможность реализовать это в модели EF, или я должен просто работать без нее и создать собственную реализацию для поддержки данных?

Спасибо!

РЕДАКТИРОВАТЬ1: Итак, после проверки модели EAV я пришел к выводу, что она не совсем соответствует моим потребностям, если я правильно понял, поскольку мои поля не являются динамическими для каждой сущности, но одинаковыми для всех сущностей. В общем, моя структура таблицы выглядит следующим образом:

Customer {Id: int, Name: string}

Customer_CustomFields {Id: int, CustomerId: int, UserDefinedName1, UserDefinedName2,...}

Единственное, что здесь меняется - это UserDefinedName-Column. Имя столбца устанавливается равным имени, определенному пользователем для настраиваемого поля, например "CF_RandomInfo". Тип этого столбца изменяется в зависимости от того, какой тип пользователь выбрал для этого настраиваемого поля (nvarchar(max), float и т. Д.). Также число пользовательских столбцов неизвестно.

Мне было интересно, могу ли я реализовать эту структуру как Contained OpenType в классе клиентов?

1 ответ

Вы можете использовать ссылку на модель EAV.

Но! если вы можете сделать предположение типа "не более XX строковых свойств", вы можете зарезервировать эти свойства в модели, такой как StringProperty1, StringProperty2... (Microsoft часто использует этот метод для пользовательских свойств), и включить / переименовать их на уровне EDM вашего служба данных.

редактировать:

OData v4 поддерживает ссылку opentypes.

Но вы все равно должны хранить свои динамические свойства в базе данных. EAV является наиболее удобным способом в базах SQL - вам просто нужно хранить разрешенные свойства и типы для каждой таблицы / типа сущности.

Если вы хотите использовать функцию OpenType в odata, вы должны предоставить словарь свойств самостоятельно (см. Пример по ссылке). Таким образом, вам нужно объединить вашу "базовую" сущность с расширенными свойствами и ВЫБРАТЬ их в словарь.

Предопределенные свойства пути:

-колоночный способ не меняется, вы просто меняете имя в EDM или на уровне EF через fluentAPI

-String + Decimal + приведение оддатов + валидация охватывает практически все типы, которые вам нужны

Другие вопросы по тегам