.Net Core 2 EF核心连接字符串问题

时间:2018-10-05 06:49:03

标签: 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 = 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();
    }

所以当我查询时

using (CircolariContext db = new CircolariContext(new DbContextOptions<CircolariContext>()))
{
   List<Argomenti> listaArgomenti = db.Argomenti.ToList();
}

我有问题:处理请求时发生未处理的异常。

InvalidOperationException:使用了已命名的连接字符串,但是在应用程序的配置中找不到名称“ Circolari”。请注意,仅在使用“ IConfiguration”和服务提供程序时(例如在典型的ASP.NET Core应用程序中),才支持命名连接字符串。有关更多信息,请参见https://go.microsoft.com/fwlink/?linkid=850912

Microsoft.EntityFrameworkCore.Storage.Internal.NamedConnectionStringResolverBase.ResolveConnectionString(string connectionString)

有人可以帮我吗?

4 个答案:

答案 0 :(得分:2)

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());
            }
        }

答案 1 :(得分:0)

最后,我找到了解决问题的方法:

现在必须在asp.net核心中注入所有内容,以便您可以通过ServiceProvider获得数据库上下文(就像编译器告诉我的那样)

UIPickerView

答案 2 :(得分:0)

修改startup.cs

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

然后使用带有实体框架操作的API CONTROLLER选项添加控制器

答案 3 :(得分:0)

我看到了同样的错误消息,但这里的解决方案都没有为我解决这个问题。

我的问题是在我的 DEV 环境中,我选择了多个项目作为启动项目。

在这种情况下,Visual Studio 似乎不知道在哪里查找 appsettings.json 文件。

临时切换到单个启动项目解决了这个问题,因此当我需要使用 Scaffold-DbContext 重建数据库模型时,我会这样做。