Подтвердить что ты не робот

Застрял в подходе миграции EF

Я каким-то образом получил проект EF5 в состоянии, в котором я не могу продолжить.

Когда я делаю "базу данных обновлений", я получаю:

Невозможно обновить базу данных в соответствии с текущей моделью, так как есть ожидающие изменения, и автоматическая миграция отключена. Либо записывайте ожидающие изменения модели в миграцию на основе кода, либо разрешайте автоматическую миграцию. Установите DbMigrationsConfiguration.AutomaticMigrationsEnabled в true, чтобы включить автоматическую миграцию. Вы можете использовать команду "Добавить-Миграция" для записи изменений ожидающих моделей на перенос на основе кода.

ok, отлично, поэтому я пытаюсь "добавить-перенаправить", и я получаю:

Невозможно создать явную миграцию, поскольку ожидаются следующие явные миграции: []. Примените ожидающие явные миграции, прежде чем пытаться генерировать новую явную миграцию.

20 GOTO 10??

что я должен делать в этот момент? (кроме перехода на NHibernate?)

4b9b3361

Ответ 1

Что для меня работало:

  • Возврат всех моих изменений (сначала создание резервной копии) обратно в известное хорошее состояние.
  • Выполнение add-migration DummyMigration. Это вызвало некоторые ложные изменения, которые я прокомментировал.
  • Вызывается update-database, чтобы добавить метаданные миграции + в таблицу [__MigrationHistory].
  • Внесите необходимые изменения (из резервной копии кода, который я использовал ранее).
  • Сделайте обычный add-migration/update-database.

Не идеально, и было бы здорово увидеть, есть ли лучшее решение, но это сработало для меня.

Ответ 2

Для меня проблема заключалась в том, что мы переименовали пространство имен миграции 2014123456_Initial.cs.
Но VS не восстановил пространство имен в связанном с ним файле 2014123456_Initial.Designer.cs.

После того, как Designer.cs был изменен для использования одного и того же пространства имен, все это снова заработало.


(также опубликовал это как ответ здесь, потому что оба вопроса настолько похожи)

Ответ 3

Я ошибся в базе данных создания

    using System.ComponentModel.DataAnnotations;
    using System.Globalization;
    namespace ProductsManager.Models
    {
        public class Product
        {
            public int ProductId { get; set; }
            public string Name { get; set; }
            public string Description { get; set; }
            public string Production { get; set; }
            public string Size { get; set; }
            public decimal<--- Price { get; set; }
            public string Barcode { get; set; }
        }
    }

после добавления-переноса Начал я понял и изменил код на общедоступный int Price {get; задавать; } сделал такую ​​же добавку-миграцию DummyMigration и ее созданную в папке миграции 080372472_dummyMigration

namespace IdetityBeta.Migrations
{
    using System;
    using System.Data.Entity.Migrations;

    public partial class DummyMigration : DbMigration
    {
        public override void Up()
        {
            AlterColumn("dbo.Products", "Price", c => c.String());
        }

        public override void Down()
        {
            AlterColumn("dbo.Products", "Price", c => c.Decimal(nullable:             false, precision:              18, scale: 2));
        }
    }
}

Итак, была решена база данных обновлений и проблема

Ответ 4

Я обошел это с помощью

  • Запустить "Обновить базу данных - Script -Force"
    • обратите внимание на последнюю явную попытку миграции перед ошибкой "Не удалось обновить базу данных..."
  • Запустите "Обновить базу данных - Script -TargetMigration [lastmigration]", используя последний перенос, отмеченный предыдущей попыткой

Затем я мог запустить в script и добавить новую миграцию. Это на EF6 и Nuget 2.8 - возможно, это не сработало, когда вопрос был отправлен.

Ответ 5

Я изменил следующее значение в моем классе Configuration.cs от false до true.

AutomaticMigrationsEnabled = true; 

В папке App_Data я переименовал мою базу данных проекта - файл с окончанием .mdf(поэтому будет создан новый), а в консоли диспетчера пакетов я ввел следующую команду:

обновление базы данных,

после чего ожидающие миграции выполнялись гладко.

Обратите внимание, что это сработало для меня, но я не 100%, если это лучшая практика. В любом случае это Руководство Entity Framework Code First для миграций говорит:

"Если вы получаете сообщение об ошибке, указывающее, что таблица уже существует и не может быть создана, возможно, это потому, что вы запустили приложение после удаления базы данных и до того, как вы выполнили обновление базы данных. В этом случае удалите фильмы .mdf снова и повторите команду update-database. Если вы все еще получаете сообщение об ошибке, удалите папку миграции.."

Также о AutomaticMigrationsEnabled = true; этой статье MSDN, Data Points: The First Migrations Mystery: Solved говорится:" Миграции могут запускаться автоматически, что означает, что изменения модели будут обнаружены, и миграции, соответствующие изменениям, будут созданы и запущены в базе данных. Все это происходит во время выполнения во время инициализации базы данных. Автоматические миграции удобны для простых приложений, но у вас очень мало контроля над ними, и я обычно не делаю рекомендую включить их. Я был счастлив, когда Code First переключил значение по умолчанию на false.