[英]Injecting an EF Context in ASP.NET Core app and using migrations
我目前正在尝试将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 config的内容。
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的基本构造函数。
我已经将该类配置为在构造函数中接受此设置,因此我不知道自己做错了什么。 我的设置有什么问题吗?
CosmosDB是无架构的。 因此,没有“迁移”的概念。 如果添加新属性,它将开始为该新属性保存数据。 当然,在某些情况下您想“迁移”-也许您重命名了道具。 但是,更多的是数据迁移。 您需要更新容器中的所有项目,才能将数据从旧成员移动到新成员。 EF Core当前不支持这种情况,因此您需要提出自己的策略来进行此类更改。
总而言之,您不会为CosmosDB存储创建迁移,因此这很可能是行不通的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.