Добавление меток времени с помощью миграции EF 4.3

Я использую Code First Migrations и изменяю свою модель, чтобы добавить в свои таблицы поля временных меток. Я пытаюсь добавить поля временных меток во вторую миграцию. Вот пример того, как выглядит мой код

public class User {
    public int UserId { get; set; }
    public string UserName { get; set; }      
    public byte[] TimeStamp { get; set; }
}

 public class UserModelConfiguration: EntityTypeConfiguration<User> {
        public UserModelConfiguration() {
            Property(p => p.UserName).IsRequired().HasMaxLength(250);
            Property(p => p.TimeStamp).IsRowVersion();            
        }
    }

Сгенерированная миграция выглядит так

public override void Up()
        {                
            AddColumn("Users", "TimeStamp", c => c.Binary(nullable: false, fixedLength: true, timestamp: true, storeType: "rowversion"));
        }

Когда я выполняю команду Update-Database, я получаю сообщение об ошибке, в котором говорится "Невозможно создать значения по умолчанию для столбцов с отметкой времени типа данных. Таблица "Пользователи", столбец "Отметка времени". Не удалось создать ограничение" Я переместил все данные из таблицы, но это не решило проблему.

Как я могу добавить поле метки времени в этот набор миграции?


person cecilphillip    schedule 07.03.2012    source источник
comment
Попробуйте nullable:true. Метки времени будут заполнены в любом случае.   -  person Gert Arnold    schedule 07.03.2012
comment
Это сработало. Сгенерируйте правильный SQL при применении директивы -Script. Добавьте свой ответ, чтобы я мог отметить это как решенное   -  person cecilphillip    schedule 07.03.2012
comment
Был ли сценарий сгенерирован с использованием типа данных Timestamp/Rowversion или byte()?   -  person Jorriss    schedule 09.03.2012
comment
генерируется как временная метка, а не нулевая   -  person cecilphillip    schedule 09.03.2012


Ответы (3)


Используйте 1_. Столбец временной метки будет иметь null в спецификации столбца, но он все равно будет заполнен.

person Gert Arnold    schedule 07.03.2012
comment
Как ни странно... моя сгенерированная схема показывает поле метки времени как ненулевое. Я не знаю, зависит ли это поведение от того, какая версия SQL Server используется. - person cecilphillip; 07.03.2012
comment
Я успешно запустил ваш код на SQL Server 2008 R2 (Microsoft SQL Server 2008 R2 (RTM) — 10.50.1600.1 (X64)). Какую версию вы используете на Сесиле? - person Jorriss; 07.03.2012
comment
SQL Server 2008 x64 — 10.0.4064.0 - person cecilphillip; 08.03.2012

Мы только сегодня столкнулись с этой проблемой. Наше решение состояло в том, чтобы удалить таблицу, а затем воссоздать ее с помощью миграции. 2 отдельных сценария миграции.

Очевидно, что это не идеально, если вы хотите сохранить данные, но в нашем случае это не было проблемой.

Было бы интересно услышать о менее грязном решении.

ХТН.

person Sean Kenny    schedule 07.03.2012
comment
Я тоже это пробовал. Я чувствую себя грязным решением. Я отправил отзыв в EF UserVoice goo.gl/ByCs. Я просто жду, когда это будет одобрено - person cecilphillip; 07.03.2012

К вашему сведению, эта ошибка была исправлена ​​в бета-версии 2 EF 5.0. Лучший обходной путь для предыдущих версий — это то, что уже упоминалось здесь: укажите значение nullable:true. Спасибо, что сообщили о проблеме!

person divega    schedule 01.04.2012