2013-05-16 6 views
3

Мое приложение сначала использует код 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.

Итак, подведем итоги:

  1. Отключение автоматического миграции приводит к EF, чтобы обнаружить изменения фантомные и бросать исключения
  2. Включение автоматического переноса в сочетании с пользовательской миграцией приводит к отображению всех существующих строк в ntext
  3. строки, отображаемые в ntext, не могут быть запрошены, что делает их бесполезными в моем приложении

ответ

0

Для меня разработана модификация метода Up.

SerialNumber = c.String(maxLength: 99) 

был применен вместо

SerialNumber = c.String() 
0

я была такая же проблема, и я фиксированной путем редактирования типа данных столбца таблицы вручную, открыв SQL Server Compact/SQlite Toolbox Windows Explorer, а затем расходуют базу данных имя, затем расходуем таблицу, которую вы хотите отредактировать, и щелкните правой кнопкой мыши на столбце, который вы хотите отредактировать, и нажмите «Сбросить сценарий», затем запустите скрипт, и столбец будет удален из таблицы, затем щелкните правой кнопкой мыши по таблице и нажмите «Добавить столбец» и здесь вы можете выбрать нужный тип данных и добавить новый столбец таким образом. Я надеюсь, что это помогает кому-то.