繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM