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

Миграция EF показывает пустые методы Up() Down()

У меня есть локальная база данных, в которой сейчас находится вторая версия, и теперь нужно перейти к третьей версии.

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

В моей модели есть около 30 классов, а внутри папки модели есть папка сопоставления и содержит сопоставления для этих 30 классов.

Итак, теперь я добавил 1 новый класс таким же образом, как и предыдущие классы, а затем запустил команду add-migration в консоли диспетчера пакетов.

К сожалению, я получаю пустой метод Up() и Down().

Когда я смотрю в базе данных, существует __migrationHistory, доступная с предыдущими 2 переходами. Если я сейчас запустил приложение, добавлена ​​и третья миграция, но, очевидно, новая таблица не создается, потому что она не находится в методе Up().

Что я могу делать неправильно?

Я думаю, что что-то идет не так, когда выкладываете предыдущие миграции... Это похоже на то, что я не могу найти новые классы Code-First, которые я добавил.

Это моя команда:

add-migration "1.2" -verbose -ProjectName "MyEFproject"

Я предполагаю, что строительные леса не знают, где искать новый класс... или это согласуется с тем, что все классы моделей просто ожидаются в проекте?

Результат добавления-миграции:

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

public partial class _1002 : DbMigration
{
    public override void Up()
    {
    }

    public override void Down()
    {
    }
}
}

Пример нового класса модели:

using System;
using System.Collections.Generic;

namespace MyProject.Models
{
public partial class MyTable
{

    public string SomeId { get; set; }
    public string SomeText { get; set; }


}
}

Пример нового класса сопоставления

using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;

namespace MyProject.Models.Mapping
{
 public class MyTableMap : EntityTypeConfiguration<MyTable>
{

    public MyTableMap()
    {
        // Primary Key
        this.HasKey(t => t.SomeId);

        // Properties
        this.Property(t => t.SomeText)
            .IsRequired()
            .HasMaxLength(30);



        // Table & Column Mappings
        this.ToTable("MyTable", "database");
        this.Property(t => t.SomeId).HasColumnName("SomeId");
        this.Property(t => t.SomeText).HasColumnName("SomeText");


    }




   }
}

Спасибо,

4b9b3361

Ответ 1

Вам нужно добавить таблицу в свою реализацию класса DbContext, например.

public class MyDatabaseEntities : DbContext {
    public virtual DbSet<MyTable> MyTable { get; set; }
}

Ответ 2

Мне удалось исправить эту проблему, удалив запись последней миграции из таблицы _MigrationHistory. Эта запись была неправильно создана до того, как я добавил DbSet для нового объекта модели в класс DbContext. После этого удаления была создана новая миграция с правильными методами Up() и Down().

Ответ 3

При откате существующего базового контекста данных EF до пустого значения мои миграции не будут генерироваться, пока я не удалю ApplicationDbContextModelSnapshot, сопровождающий миграции.

Этот класс создается автоматически и должен соответствовать текущему уровню миграции.

Ответ 4

set;} после имен моих переменных

Ответ 5

В моем случае проект datacontext представляет собой проект класса lib. Он отличается от проекта запуска, который представляет собой проект asp.net mvc 5. Теперь по ошибке строка подключения в проекте запуска указывает на другую другую базу данных.

Таким образом, убедитесь, что проект datacontext и проект запуска указывают на одну и ту же базу данных. Также используйте полную команду, как указано в следующем вопросе. Вы также можете включить -Force.

add-migration "InitialMigration" -verbose -ProjectName "MyEFproject" -Force

Ответ 6

Также: убедитесь, что все добавленные вами новые свойства общедоступны!

В моем случае я выполнял миграцию, где я добавлял поля в существующую таблицу и получал пустые методы Up и Down,

У меня было что-то вроде этого:

public bool ExistingField { get; set; }
bool NewField { get;set; }

Вы можете заметить разницу...?


Если вы допустите эту ошибку, перезапустите миграцию с тем же именем (вам, вероятно, потребуется добавить параметр -Force чтобы -Force его полностью).

PS. Всегда проверяйте, что ваш проект полностью собран, прежде чем пытаться выполнить какую-либо команду EF. Если ваш проект еще не построен, вы напрашиваетесь на неприятности.

Ответ 7

Я получал пустые миграции, добавленные, когда я ошибочно связал две таблицы, используя отношения 1-много, а не многие-многие (т.е. я забыл одно из свойств навигации). У меня был файл для посева, который ожидал много-много отношений и впоследствии не выполнялся во время миграции, что привело к сбою миграции. К сожалению, не было вывода, из-за чего было очевидно, что это была проблема, и только с помощью Entity Framework Power Tools (v4, но установленного в VS2015) я визуально увидел неправильную связь и понял, что это, вероятно, причина.

Ответ 8

Мне пришлось обновить базу данных с последней миграцией перед пустой, добавив этот параметр -TargetMigration:"{your-migration-name}".

Вероятно, это скажет вам, что будет потеря данных от следующей ошибки, которую мы попробовали. Если вы можете себе это позволить, добавьте к нему -Force.

Затем я попытался добавить свою новую Add-Migration и она не была пустой.

Последнее, что вам может понадобиться сделать, если приведенное выше исключение - это перейти в SQL Server Management Studio, удалить последнюю Automatic migration и попытаться добавить ее снова.

Ответ 9

Если ваш проект небольшой, то есть у вас пока не слишком много миграций, вы можете удалить все из своей папки Migration. После этого добавьте миграции снова.

Ответ 10

У меня возникла именно эта проблема после того, как я хотел добавить дополнительный столбец в мою базу данных. Поскольку мои данные не будут заполняться, пока таблицы не будут пустыми, я удалил все таблицы и миграции, чтобы воссоздать таблицы. Когда я пытался мигрировать, у миграции были пустые методы вверх и вниз.

Я решил это, удалив файл снимка, так как это создавало проблему. Поэтому я удалил все миграции и файл снимка, снова добавил миграцию и запустил обновление базы данных. Таблицы и миграции были успешно обновлены с моим новым столбцом.

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

Ответ 11

Для меня проблема была в том, что свойство Id, которое должно соответствовать идентификатору таблицы, называлось FeedbackId. Я изменил на "Id", а затем "вверх/вниз" больше не было пустым. Не знаю, может ли это как-то помочь