2016-09-07 3 views
0

Так что сегодня я столкнулся с странной ситуацией - при обновлении существующей базы данных новыми таблицами я получил дополнительный столбец в одной из моих таблиц.ASP.NET - Неожиданный столбец появляется во время обновления базы данных Code First

Как это выглядит:

  • Raport.cs

    public class Raport 
    { 
        [DatabaseGenerated(DatabaseGeneratedOption.None)] 
        [Key] 
        public string raport_id { get; set; } //id raportu 
        public string userID { get; set; } 
        public DateTime creation_time { get; set; } 
        public DateTime last_modyfication { get; set; } 
    
    
        public virtual ICollection<ThrashType> ThrashType { get; set; } 
    
        public virtual UserFrontInfo UserFrontInfo { get; set; } 
    

    }

  • ThrashType.cs

    public class ThrashType 
        {  
        [Key] 
        //[DatabaseGenerated(DatabaseGeneratedOption.None)] 
        public int IdTrash { get; set; } 
        public string RaportId { get; set; } 
        public string ClassName { get; set; } 
    
        public int Quantity { get; set; }    
        public string Information { get; set; } 
    
        public virtual Raport Raport { get; set; } 
    
    } 
    
  • UserFrontInfo.cs

    public class UserFrontInfo 
    { 
    
        [DatabaseGenerated(DatabaseGeneratedOption.None)] 
        [Key] 
        public string userId { get; set; } 
        public string userName { get; set; } 
        public string whereFromName { get; set; } 
    
        public virtual ICollection<Raport> Raport { get; set; } 
    } 
    

То, что я сделал перед запуском в этой ситуации: 1/добавлено Миграции 2 /, так как мне нужно, чтобы добавить новые таблицы, я вслед за этим: Reset Entity-Framework Migrations (первый комментарий под ответами; более читаемая версия):

кредиты Greg Gum для этого (https://stackoverflow.com/users/425823/greg-gum)

выпуск: Вы сброшенная свои миграции, и вы хотели бы сбросить его без удаления существующих таблиц. Проблема: вы не можете сбрасывать миграцию с существующими таблицами в базе данных, так как EF хочет создавать таблицы с нуля. Что делать: Удалить существующие миграции из таблицы Migrations_History. Удалите существующие миграции из папки миграции микс. . Запустите add-migration Сброс. Это создаст миграцию в вашей папке миграции, которая включает в себя создание таблиц (но она не будет запускаться так, чтобы она не выходила из строя.) Теперь вам нужно создать исходную строку в таблице MigrationHistory, чтобы EF имел моментальный снимок текущего состояния. EF сделает это, если вы примените миграцию . Однако вы не можете применить перенос, который вы только что сделали , поскольку таблицы уже существуют в вашей базе данных. Поэтому перейдите в Migration и закомментируйте весь код внутри метода «Вверх». Теперь запустите update-database. Он применит миграцию (хотя фактически не изменяет базу данных ) и создает строку моментального снимка в MigrationHistory. Теперь вы сбросили свои миграции и можете продолжить нормальные миграции .

Тогда все было отлично, но в таблице ThrashType у меня есть дополнительный столбец с именем «Raport_raport_id».

ответ

0

Ответ должен был изменить имя поля в ThrashType от «RaportId» до «raport_id», удалить dbo.ThrashType и воссоздать шаги сверху.

Я хотел бы указать, что я добавил одну вещь к шагам сверху - в «number_digits_migration_file» .cs Я прокомментировал только существующие таблицы и оставил те, которые я хотел создать.

Хотя я решил свою проблему, мне это интересно. Кто-нибудь имел такой опыт с подходом Code First?

Отличный день!