C# .Net Core 2 EF Core连接字符串问题
这是我的appsettings.jsonC# .Net Core 2 EF Core连接字符串问题,c#,entity-framework,ef-core-2.0,ef-core-2.1,C#,Entity Framework,Ef Core 2.0,Ef Core 2.1,这是我的appsettings.json "ConnectionStrings": { "Circolari": "Server=abcde;Database=Circolari;Trusted_Connection=True;" } 这是我的startup.cs public Startup(IConfiguration configuration, IHostingEnvironment env) { Configuration = configurati
"ConnectionStrings": {
"Circolari": "Server=abcde;Database=Circolari;Trusted_Connection=True;"
}
这是我的startup.cs
public Startup(IConfiguration configuration, IHostingEnvironment env)
{
Configuration = configuration;
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
Configuration = configurationBuilder.Build();
}
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
//Circolari
string connectoionString = Configuration.GetConnectionString("Circolari");
services.AddDbContext<CircolariContext>(options => options.UseSqlServer(connectoionString));
services.AddMvc();
}
公共启动(IConfiguration配置,IHostingEnvironment环境)
{
配置=配置;
IConfigurationBuilder configurationBuilder=新的configurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile(“appsettings.json”,可选:true,reloadOnChange:true);
Configuration=configurationBuilder.Build();
}
//此方法由运行时调用。使用此方法向容器中添加服务。
public void配置服务(IServiceCollection服务)
{
//环状
字符串connectionString=Configuration.GetConnectionString(“Circolari”);
services.AddDbContext(options=>options.UseSqlServer(connectoionString));
services.AddMvc();
}
所以当我进行查询时
using (CircolariContext db = new CircolariContext(new DbContextOptions<CircolariContext>()))
{
List<Argomenti> listaArgomenti = db.Argomenti.ToList();
}
使用(CircolariContext db=new CircolariContext(new DbContextOptions())
{
详细信息请参见列表
Microsoft.EntityFrameworkCore.Storage.Internal.NamedConnectionStringResolverBase.ResolveConnectionString(字符串连接字符串)
有人能帮我吗?我终于找到了解决问题的办法:
现在,在asp.net核心中,所有内容都必须被注入,因此您可以通过ServiceProvider获得您的db上下文(就像编译器告诉我的那样)
//这是构造函数
公共电子交易中心(IServiceProvider服务提供商)
{
_服务提供者=服务提供者;
}
//这就是方法
使用(\u aspContext=\u serviceProvider.GetService())
{
listaGiacenze=_aspContext.TabGiacenza.ToList();
}
修改startup.cs
public void配置服务(IServiceCollection服务)
{
services.AddDbContext(选项=>
options.UseSqlServer(Configuration.GetConnectionString(“MiGranCitaDB”));
然后使用选项API控制器添加控制器,并使用实体框架执行操作
YouContextFile.cs添加此代码
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
// add IConfigurationRoot to get connection string
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("appsettings.json")
.Build();
optionsBuilder.UseSqlServer(configuration.GetConnectionString("DefaultConnection"), x => x.UseNetTopologySuite());
}
}
我看到了相同的错误消息,这里没有一个解决方案为我解决了这个问题
我的问题是,在我的开发环境中,我选择了多个项目作为启动项目
在这种情况下,Visual Studio似乎不知道在哪里查找appsettings.json文件
临时切换到单个启动项目可以解决此问题,因此我在需要使用Scaffold DbContext重建数据库模型时会这样做。您确定正在加载appSettings.json
吗?您已将其标记为可选,因此如果env.ContentRootPath
不是正确的文件夹,则不会加载它。请尝试标记它asoptional:false
查看它是否引发异常。您的“因此当我执行查询时”示例代码没有使用依赖项注入,这是生成错误的实际代码吗?我想知道错误是如何获取连接字符串名称“Circolari”的如果是…@John,我认为配置已经加载,因为如果我在ConfigureServices中放置一个breackpoint,字符串将被读取,并且使用optional:false,错误仍然存在here@Moho这是实际的代码,与我在.net coreUse上配置ef core的小示例中编写的代码相同可选:false
因为我的问题解决了,我无法搭建一个新的控制器。
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<DB_A6136B_MiGranCitaContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MiGranCitaDB")));
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
// add IConfigurationRoot to get connection string
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("appsettings.json")
.Build();
optionsBuilder.UseSqlServer(configuration.GetConnectionString("DefaultConnection"), x => x.UseNetTopologySuite());
}
}