我目前正在尝试将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的基本构造函数。
我已将类配置为在构造函数中接受此设置,因此我不知道自己做错了什么。我的设置有什么问题吗?
答案 0 :(得分:2)
CosmosDB是无架构的。因此,没有“迁移”的概念。如果添加新属性,它将开始为该新属性保存数据。当然,在某些情况下您想“迁移”-也许您重命名了道具。但是,更多的是 data 迁移。您需要更新容器中的所有项目,才能将数据从旧成员移动到新成员。 EF Core当前不支持这种情况,因此您需要提出自己的策略来进行此类更改。
总之,您不会为CosmosDB存储创建迁移,因此这很可能是行不通的。