[英]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.