Мое приложение сначала использует код Entity Framework 5.0 поверх базы данных Sql CE. До сих пор мы использовали автоматические миграции для управления изменениями сопоставления сущностей. Однако теперь у меня есть изменение, для которого мне нужно создать настраиваемую миграцию, чтобы гарантировать, что во время обновления данные не будут потеряны. Я внес изменения в сущности и использовал команду Add-Migration, для которой были созданы методы Up() и Down(). Я настроил метод Up(), чтобы вставить свой пользовательский sql для сохранения данных и протестировать мое приложение.Первичная миграция кода EF: SqlCeException, изменяющая столбец NTEXT
При запуске приложения, я получил ошибку:
Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration.
Хорошо, я не понимаю, это потому, что все мои изменения подробно описаны в методе Up(), который был выполнен. Итак, я снова включаю Автоматические миграции, чтобы посмотреть, что произойдет. Теперь я получаю эту ошибку:
"Cannot alter column of type NTEXT or IMAGE [ Column Name = LastName ]"
Эта ошибка происходит из таблицы/сущности, даже не трогали с моими изменениями. В существующей базе данных эта строка отображается на nvarchar (4000). Если я рассмотрю БД после получения этого исключения, я заметил, что столбцы были изменены на ntext. Что делает EF? Почему это касается таблиц, которые не были изменены? Как я могу получить дополнительную информацию о том, что здесь происходит?
Update: В качестве обходного пути, я попытался пометить каждый и каждый тип строки в моих модах с аннотацией данных как таковой:
[Column(TypeName = "ntext")]
public virtual string LastName
{
get;
set;
}
Теперь все мои строки используют NTEXT в базе данных , Это приводит к дальнейшему исключений, когда запросы выполняются:
The ntext and image data types cannot be used in WHERE, HAVING, GROUP BY, ON, or IN clauses, except when these data types are used with the LIKE or IS NULL predicates.
Итак, подведем итоги:
- Отключение автоматического миграции приводит к EF, чтобы обнаружить изменения фантомные и бросать исключения
- Включение автоматического переноса в сочетании с пользовательской миграцией приводит к отображению всех существующих строк в ntext
- строки, отображаемые в ntext, не могут быть запрошены, что делает их бесполезными в моем приложении