如何从 Entity Framework Core 中的 appsettings.json 设置连接字符串

pos*_*815 3 c# entity-framework-core .net-core

我正在使用 Entityframework Core 和代码优先方法设置一个新数据库。我已经在下面的代码清单中设置了一个上下文类,以及数据库表的所有需要​​的类。现在我想用

using (var context = new MyContext())
{
    context.Database.EnsureCreated();
}
Run Code Online (Sandbox Code Playgroud)

但我得到的是一个错误,连接字符串不能为空。

我的 Connectionstring 在 appsettings.json 文件中设置,我在项目构建时将其复制到输出目录。

我尝试了不同的方法来从 appsettings 文件中获取连接字符串,但结果都相同。在 Startup 类的 Configuration 属性中,我可以看到 appsettings 文件已正确加载,但是当我想获取字符串时

ConnectionString = Configuration["Connectionstrings:MyConnection"];
Run Code Online (Sandbox Code Playgroud)

ConnectionString 始终为空。

我的 Startup.cs 文件中有这个:

 public class Startup
 {
    public static string ConnectionString { get; private set; }
    public IConfigurationRoot Configuration { get; set; }

    public Startup(IHostingEnvironment _environment)
    {
        Configuration = new ConfigurationBuilder()
                        .SetBasePath(_environment.ContentRootPath)
                        .AddJsonFile("appsettings.json")
                        .Build();
    }
Run Code Online (Sandbox Code Playgroud)

在配置 - 方法中有以下内容

using (var context = new MyContext())
{
    context.Database.EnsureCreated();
}
Run Code Online (Sandbox Code Playgroud)

在我的上下文类中,我有以下代码

public class MyContext : DbContext
{
    public MyContext()
    {
    }

    public static string GetConnectionString()
    {
        return Startup.ConnectionString;
    }

protected override void OnConfiguring(DbContextOptionsBuilder _builder)
{
    _builder.UseSqlServer(GetConnectionString());
}
Run Code Online (Sandbox Code Playgroud)

所以现在,当我启动应用程序时,我在 OnConfiguring - 方法中收到连接字符串不能为空的错误。

我的 appsettings.json 文件是

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },

  "Connnectionstrings": {
    "MyConnection": "server=.;database=MyDatabase;trusted_connection=true;MultipleActiveResultSets=True"
  },
}
Run Code Online (Sandbox Code Playgroud)

Rom*_*syk 5

ConnectionString是空永诺,因为有一个错字,试试这个

ConnectionString = Configuration["Connnectionstrings:MyConnection"];
Run Code Online (Sandbox Code Playgroud)

或在 appsettings.json 中修复名称