Можно ли создавать определяемые пользователем типы данных при использовании EF 4.1 Code First?

Можно ли при использовании EF 4.1 Code First создать определяемые пользователем типы данных для вашей схемы?


person Sidney    schedule 10.11.2011    source источник
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