在ASP.NET Core应用中注入EF上下文并使用迁移

时间:2019-03-21 16:42:59

标签: c# asp.net-core

我目前正在尝试将EF Core dbcontext与.NET Core 2.2上的cosmos db一起使用。我的启动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"]
));

appsettings.json文件中包含cosmosdb配置文件。

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 个答案:

答案 0 :(得分:2)

CosmosDB是无架构的。因此,没有“迁移”的概念。如果添加新属性,它将开始为该新属性保存数据。当然,在某些情况下您想“迁移”-也许您重命名了道具。但是,更多的是 data 迁移。您需要更新容器中的所有项目,才能将数据从旧成员移动到新成员。 EF Core当前不支持这种情况,因此您需要提出自己的策略来进行此类更改。

总之,您不会为CosmosDB存储创建迁移,因此这很可能是行不通的。