gpt4 book ai didi

c# - ASP.NET Core 2 +获取数据库上下文实例

转载 作者:行者123 更新时间:2023-12-03 12:08:32 26 4
gpt4 key购买 nike

我正在尝试获取DbContext的实例(以便在启动时可以做一些额外的工作),尝试在Configure方法中获取实例时出现以下错误:

System.InvalidOperationException:'无法从根提供程序解析作用域服务'MyApp.Data.MyDbContext'。

public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyDbContext>(
options => options.UseSqlServer(Configuration.GetConnectionString("MyDbContext")));
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{

var dbContext = app.ApplicationServices.GetService(typeof(MyDbContext)) as MyDbContext;
}

我可以通过 Controller 等访问DbContext的实例

最佳答案

Paul Hiles的评论是正确的,但该方法在.NET Core 1.0中效果更好。

在ASP.NET Core 2.0中,通常不建议在Startup.cs中运行任何数据库设置。这是因为如果您从CLI或Visual Studio运行任何迁移,它将运行所有Startup.cs并尝试运行配置,这将失败。当然,如果您不使用 Entity Framework ,那么这不是问题,但是仍然不是在2.0中推荐的方法。现在建议使用Program.cs进行操作。

例如,您可以创建IWebHost的扩展方法,该方法将运行所需的任何设置。

public static IWebHost MigrateDatabase(this IWebHost webHost)
{
var serviceScopeFactory = (IServiceScopeFactory)webHost.Services.GetService(typeof(IServiceScopeFactory));

using (var scope = serviceScopeFactory.CreateScope())
{
var services = scope.ServiceProvider;
var dbContext = services.GetRequiredService<YourDbContext>();

dbContext.Database.Migrate();
}

return webHost;
}

然后在 Program.cs中,您可以在运行之前调用该方法。
public static void Main(string[] args)
{
BuildWebHost(args)
.MigrateDatabase()
.Run();
}

关于c# - ASP.NET Core 2 +获取数据库上下文实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45885019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com