Можно ли при использовании EF 4.1 Code First создать определяемые пользователем типы данных для вашей схемы?
Можно ли создавать определяемые пользователем типы данных при использовании EF 4.1 Code First?
comment
Да. Можно посмотреть этот пост [Изменение модели Entity Framework во время выполнения] [1] [1]: stackoverflow.com/questions/4019895/
- person DeveloperX   schedule 11.11.2011
comment
@DeveloperX Этот вопрос касается пользовательских полей, а не пользовательских типов данных.
- person Eranga   schedule 11.11.2011
Ответы (1)
Простой ответ - нет.
Более длинный ответ:
Текущая реализация EF приводит к множеству проблем при попытке использовать пользовательские типы:
- Тип должен быть определен до его использования в определении DDL таблицы. Из-за этого тип нельзя определить в методе
Seed
инициализатора базы данных (который часто используется для других конструкций базы данных, таких как триггеры или индексы). Чтобы это работало, вы должны создать полностью новый инициализатор, реализуяIDatabaseInitializer
и отдельное создание базы данных и создание таблицы, потому что между ними должны быть определения пользовательских типов. Вот приведен пример создания инициализатора базы данных (он будет пересоздавать таблицы каждый раз, когда вы запускаете приложение). - Создание инициализатора базы данных, отражающего изменения модели из скетча, более сложно, поскольку эта логика, вероятно, является внутренней для EF.
- Вы также должны добавить проверку того, что тип еще не создан
- Даже если у вас есть инициализатор, вы все равно столкнетесь с самым большим блокировщиком. EF не готов разрешить вам определять пользовательские типы для столбцов — ни
ColumnAttribute
, ниHasColumnType
в Fluent API не будут принимать пользовательский тип. Таким образом, ваше сопоставление должно указывать базовые примитивные типы SQL, и эти пользовательские типы будут использоваться в таблицах DDL, созданных EF. Поэтому, если пользовательский инициализатор базы данных не обработает эти сгенерированные сценарии SQL и не заменит базовые типы пользовательскими типами (действительно уродливое решение), таблицы не будут их использовать.
person
Ladislav Mrnka
schedule
15.11.2011