Ошибка при добавлении миграции в проект EntityFramework - PullRequest
0 голосов
/ 07 сентября 2018

Работа на серверной части .NETCore MVC, использующей EntityFramework. Проект «Решение как услуга», проект EntityFramework и проект API (MVC). Проект API является точкой зависти / запуска. Это существующий проект, и был начальный файл миграции, который я использовал для настройки базы данных из командной строки, используя: dotnet ef database update. Теперь я добавил новую модель в проект EntityFramework и добавил соответствующий public DbSet в класс Context. Сейчас я пытаюсь сгенерировать файл миграции обновления для него, чтобы я мог обновить базу данных. Использование dotnet ef migrations add migration_002 выдало ошибку:

Невозможно создать объект типа 'StartNetContext'. Добавить реализация 'IDesignTimeDbContextFactory' для проект или см. https://go.microsoft.com/fwlink/?linkid=851728 для дополнительные шаблоны, поддерживаемые во время разработки.

Поиск найденных сообщений и блогов, связанных с обновлениями с EF 1 -> 2 ... в данном случае не подходит. Или указание на проблемы при создании начальной миграции, когда также происходит начальное заполнение ... опять же, также не подходит в этом случае. Когда я добавляю опцию -v, я получаю немного больше информации:

Microsoft.EntityFrameworkCore.Design.OperationException: Невозможно создать объект типа «StartNetContext». Добавить реализацию 'IDesignTimeDbContextFactory' в проект или посмотрите https://go.microsoft.com/fwlink/?linkid=851728 для дополнительных шаблонов поддерживается во время разработки. ---> System.MissingMethodException: нет Конструктор без параметров определен для этого объекта.

Тьфу. Какие? Зачем мне это? Поиск, который указывает на перестройку, как настроен запуск ... определенно удостоверившись, что. AddDbContext называется - что это ...

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

ПРИМЕЧАНИЕ. Я работаю на Mac, поэтому консоль диспетчера пакетов не используется, поэтому выбор целевых проектов и т. Д. Также не является решением. Все это должно быть сделано прямо из CLI.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Оказывается, в моем случае это был простой флаг в CLI ... Несмотря на то, что проект web api был помечен как стартовый проект в решении, мне нужно было указать его и в командной строке.

dotnet ef migrations add migration_002 -s ../MyWebApp.Api

Я получил это от этого поста . Добавление флага -s сработало, даже без кода и добавления класса (что я попробовал сначала, но столкнулся с проблемами с оператором return). Это простые вещи в жизни.

0 голосов
/ 07 сентября 2018

Добавьте следующий класс в ваш основной проект.

public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<YourDbContext>
{
    public YourDbContext CreateDbContext(string[] args)
    {
        IConfigurationRoot configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .Build();
        DbContextOptionsBuilder<YourDbContext> builder = new DbContextOptionsBuilder<YourDbContext>();
        string connectionString = configuration.GetConnectionString("YourDbContextConnectionName");
        builder.UseSqlServer(connectionString);
        return new YourDbContext(builder.Options);
    }
}

Надеюсь, ваша ошибка исчезнет!

...