简体   繁体   English

从 appsettings.json 到实体框架 .NET 核心中的 OnConfiguring 方法的连接字符串

[英]Connection string from appsettings.json to OnConfiguring method in Entity Framework .NET Core

As I can see, I cannot access from this method IConfiguration injected object.如我所见,我无法通过此方法访问 IConfiguration 注入的 object。 Also, there's no way to, as I can see, access HttpContext and get in from there.此外,正如我所见,没有办法访问 HttpContext 并从那里进入。 Is there any simple way how can I get the connections string stored in appsettings.json?有什么简单的方法可以获取存储在 appsettings.json 中的连接字符串吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Projekt.Models;

using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Http;

namespace Project.DAL
{
    public class UserContext : DbContext
    {
        
        public DbSet<User> Users {get;set;}


        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            string connection_string = ""; //connection string from appsettings.json
            optionsBuilder.UseSqlServer(connection_string);
        }
            
        public class User {
            public string login{ get; set; }
            public string password { get; set; }

            
        }
    }
}

You have to inject IConfiguration into Startup constructor:您必须将IConfiguration注入Startup构造函数:

public class Startup
{
    public IConfiguration Configuration { get; }
    public IWebHostEnvironment Environment { get; }

    public Startup(IConfiguration configuration, IWebHostEnvironment environment)
    {
        Configuration = configuration;
        Environment = environment;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.ConfigureDatabase(Configuration);
       
        // ...other services
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
       // ...middlewares
    }
}

Note that I have used an extension method to configure my dbContext, this makes Startup cleaner:请注意,我使用了扩展方法来配置我的 dbContext,这使 Startup 更干净:

public static class ServiceExtensions
{
    public static void ConfigureDatabase(this IServiceCollection services, IConfiguration configuration)
    {
        services.AddDbContext<MyDbContext>(options =>
        {
            string connectionString = configuration.GetConnectionString("sqlConnection") + ";password=" + configuration["Passwords:Database"];
            options.UseSqlServer(connectionString);
        });
    }
}

As far as I know you can inject IConfiguration wherever you want:据我所知,您可以在任何地方注入 IConfiguration:

    private readonly IConfiguration _configuration;

    public MyClass(IConfiguration configuration)
    {
        _configuration = configuration;
    }

But there is nothing wrong with doing it in Startup.ConfigureServices:但是在 Startup.ConfigureServices 中这样做并没有错:

 string connection = _configuration.GetConnectionString("Main");
 services.AddDbContext<UserContext >(options => options.UseSqlServer(connection));

First you have to setup your connection string in appsettings.json首先你必须在 appsettings.json 中设置你的连接字符串

"ConnectionStrings": {
"sqlConnection": "server=\\SQLEXPRESS; database=AKKADatabase; Integrated Security=true"

}, },

And your startup.cs you have to configure your connection而你的 startup.cs 你必须配置你的连接

    public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationContext>(option => option.UseSqlServer(Configuration.GetConnectionString("sqlConnection")));
        services.AddControllersWithViews();
    }

} and after you can use it in your db context:并且在您可以在您的数据库上下文中使用它之后:

   public class ApplicationContext : DbContext
{
    public ApplicationContext(DbContextOptions options)
        : base(options)
    {
    }

} }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 .Net Core 3 / Entity Framework Core 将连接字符串放入 Appsettings.json 不起作用 - .Net Core 3 / Entity Framework Core putting connection string in Appsettings.json not working .Net Core Cant从appsettings.json中读取连接字符串 - .Net Core Cant read connection string from appsettings.json .NET Core从appsettings.json获取连接字符串 - .NET Core get connection string from appsettings.json 如何在Entity Framework Core中从appsettings.json设置连接字符串 - How to set connectionstring from appsettings.json in Entity Framework Core .NET Core 2.x从dbcontext类中的appsettings.json获取连接字符串 - .NET Core 2.x get connection string from appsettings.json in dbcontext class 现在可以在从 Windows 任务调度程序运行 .net 核心控制台应用程序时读取 appsettings.json 文件中存在的连接字符串 - Now able to read the Connection String present in appsettings.json file when running the .net core Console application from windows task scheduler Appsettings.json 中的 Asp.Net Core &amp; Sqlite 连接字符串 - 无法打开数据库 - Asp.Net Core & Sqlite connection string in appsettings.json - cannot open database 从appsettings.json中读取ConnectionString以获取Entity.Framework - read ConnectionString from appsettings.json for entity.Framework 从.NET Core 2中的类读取appsettings.json - Read appsettings.json from a class in .NET Core 2 从 .net core 3.1 中的 appsettings.json 获取值 - Get values from appsettings.json in .net core 3.1
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM