【发布时间】:2019-04-18 09:25:58
【问题描述】:
我将一个 sql server 数据库反转为它们各自的类和上下文,这一切似乎都运行良好。
在最小上下文类中,有一行代码指向连接字符串,如果保留它可以正常工作,但连接字符串完全嵌入到上下文文件中。
我尝试在上下文中注释它并通过ConfigureServices 部分添加(这样我可以在appsettings.json 中使用conn 字符串)使用
services.AddDbContext<myDBContext>(options => options.UseSqlServer(Configuration.GetConnectionString("dbconn")));
但是当我运行时,我得到一个错误:-
System.InvalidOperationException: '没有数据库提供程序 为此 DbContext 配置。可以通过以下方式配置提供程序 覆盖 DbContext.OnConfiguring 方法或使用 AddDbContext 在应用服务提供商上。如果使用 AddDbContext,则 还要确保您的 DbContext 类型接受
DbContextOptions<TContext>对象在其构造函数中并将其传递给 DbContext 的基本构造函数。'
我在 Google 上尝试了很多东西,但总是以同样的错误告终,除非我取消注释上下文类文件中的硬编码连接字符串。
知道我做错了什么吗?
我已经尝试了很多 Google 回复,但都有相同的错误 - :-
System.InvalidOperationException: '没有数据库提供程序 为此 DbContext 配置。可以通过以下方式配置提供程序 覆盖 DbContext.OnConfiguring 方法或使用 AddDbContext 在应用服务提供商上。如果使用 AddDbContext,则 还要确保您的 DbContext 类型接受
DbContextOptions<TContext>对象在其构造函数中并将其传递给 DbContext 的基本构造函数。'
我从上下文类中将其注释掉:-
optionsBuilder.UseSqlServer("Server=MYSERVER\\MSSQL2017EXPRESS;Database=DBNAME;Trusted_Connection=True;user id=DBUSER;password=DBPASSWORD;");
这就是 startup.cs 中的内容,但不起作用:-
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
//My DB conn
services.AddDbContext<myDatabaseContext>(options => options.UseSqlServer(Configuration.GetConnectionString("dbconn")));
}
我需要能够提供来自 appsettings.json 的连接字符串,而不是将其硬编码到上下文类文件中。
【问题讨论】:
-
在建立连接之前如何从数据库中检索选项?您需要建立连接的选项。选项必须在 c# 项目中,而不是数据库中。
-
如果使用了 AddDbContext,那么还确保您的 DbContext 类型在其构造函数中接受
DbContextOptions<TContext>对象并将其传递给 DbContext 的基本构造函数。'
标签: c# asp.net-mvc entity-framework razor