Можно ли создавать пользовательские типы данных при использовании EF 4.1 Code First? - PullRequest
1 голос
/ 11 ноября 2011

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

1 Ответ

1 голос
/ 16 ноября 2011

Простой ответ - нет.

Более длинный ответ:

Текущая реализация EF приводит к множеству проблем при попытке использовать пользовательские типы:

  • Тип должен быть определен до его использования в определении DDL таблицы. Из-за этого тип не может быть определен в Seed методе инициализатора базы данных (как часто используется для других конструкций базы данных, таких как триггеры или индексы). Чтобы это работало, вы должны создать совершенно новый инициализатор, реализовав IDatabaseInitializer и раздельно создавая базу данных и таблицу, потому что между ними должны быть определения пользовательских типов. Здесь - пример того, как создать инициализатор базы данных (этот будет воссоздавать таблицы каждый раз, когда вы запускаете приложение).
  • Создание инициализатора базы данных, который отражает изменения модели из эскиза, является более сложным, поскольку эта логика, вероятно, является внутренней по отношению к EF
  • Вы также должны добавить проверку того, что тип еще не создан
  • Даже если у вас есть инициализатор, вы все равно сталкиваетесь с самым большим блокировщиком. EF не готов позволить вам определять пользовательские типы для столбцов - ни ColumnAttribute, ни HasColumnType в свободном API не примут пользовательский тип. Таким образом, ваше отображение должно указывать базовые примитивные типы SQL, и эти пользовательские типы будут использоваться в таблицах DDL, созданных EF. Поэтому, если пользовательский инициализатор базы данных не постобработает эти сгенерированные сценарии SQL и не заменит базовые типы таблицами пользовательских типов (действительно уродливое решение), они не будут использоваться.
...