Внедрение контекста EF в приложение ASP.NET Core и использование миграций - PullRequest
0 голосов
/ 21 марта 2019

В настоящее время я пытаюсь использовать dbcontext EF Core с dos cosmos в .NET Core 2.2.Мой стартовый cs имеет настройку вставки контекста БД, например:

var configBuilder= new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json");

IConfigurationRoot config = configBuilder.Build();

IConfigurationSection configSection = config.GetSection("CosmosSettings");

services.AddDbContext<PiServeDb>(options => options.UseCosmosSql(
    configSection["ServiceEndpoint"], configSection["AuthKey"], configSection["DatabaseName"]
));

С помощью конфигурации cosmosdb в файле appsettings.json.

DbContext настроен на DbContextOptions вот так:

public class PiServeDb : DbContext
{
    public PiServeDb(DbContextOptions<PiServeDb> options)
    : base(options){ }

    public DbSet<Device> Devices { get; set; }
}

и при попытке запустить первоначальную миграцию для обновления базы данных я получаю эту ошибку последовательно:

Невозможно разрешить службу для типа 'Microsoft.EntityFrameworkCore.Migrations.IMigrator.Это часто потому, что ни один поставщик базы данных не был настроен для этого DbContext.Поставщик может быть настроен путем переопределения метода DbContext.OnConfiguring или с помощью AddDbContext в поставщике службы приложений.Если используется AddDbContext, то также убедитесь, что ваш тип DbContext принимает объект DbContextOptions в своем конструкторе и передает его базовому конструктору для DbContext.

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

1 Ответ

2 голосов
/ 21 марта 2019

CosmosDB не содержит схем.Таким образом, нет понятия «миграции».Если вы добавляете новое свойство, оно просто начинает сохранять данные для этого нового свойства.Конечно, есть определенные сценарии, когда вы хотите «мигрировать» - возможно, вы переименовали опору.Однако это скорее миграция data .Все элементы в вашем контейнере необходимо обновить, чтобы переместить данные от старого члена к новому.EF Core в настоящее время не поддерживает этот тип сценария, поэтому вам нужно придумать собственную стратегию для внесения таких изменений.

Длинно и коротко, вы не создаете миграции для магазина CosmosDB, поэтомуВероятно, поэтому это не сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...