无法解析符号 GetConnectionstring

MyD*_*ons 3 c# .net-core-3.0

我有一个 .NET Core 3.0 类库。这是我第一次使用 .NET Core

我想连接到数据库。

https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-strings显示如何做到这一点。

https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.configuration.configurationextensions.getconnectionstring?view=dotnet-plat-ext-3.1显示了Microsoft.Extensions.Configuration命名空间中存在的方法

我无法访问它。

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;  //no underlines and imported via Nuget

namespace Core.Cms.DAL
{
    public class Entities : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {  optionsBuilder.UseSqlServer(Microsoft.Extensions.Configuration.GetConnectionString(ConnectionString.SqlServerExpress));

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

截屏

在此处输入图片说明

为什么我没有Microsoft.Extensions.Configuration.GetConnectionString()可用的方法?

编辑

重新启动骑手 - 同样的问题

Entities.cs(17, 45):[CS0234] 命名空间“Microsoft.Extensions.Configuration”中不存在类型或命名空间名称“GetConnectionString”(您是否缺少程序集引用?)

小智 28

在 .NET 6 中,您现在可以像这样使用 builder.Configuration.GetConnectionString

builder.Services.AddDbContext<ApplicationDBContext>(options => 
options.UseSqlServer(
builder.Configuration.GetConnectionString("DefaultConnection")
));
Run Code Online (Sandbox Code Playgroud)


Far*_*ani 7

您应该使用该IConfiguration接口。您可以DI像这样访问配置表单

private readonly IConfiguration _configuration;
public Entities(IConfiguration configuration)
{
    _configuration = configuration
}
Run Code Online (Sandbox Code Playgroud)

然后使用_configuration.GetConnectionString(ConnectionString.SqlServerExpress)代替Microsoft.Extensions.Configuration.GetConnectionString()

optionsBuilder.UseSqlServer(_configuration.GetConnectionString(ConnectionString.SqlServerExpress));
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 Asp.Net Core Web 应用程序,这是在启动类中配置 DbContext 的更好方法

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}
public IConfiguration Configuration { get; set; }
Run Code Online (Sandbox Code Playgroud)
services.AddDbContext<Entities>(options =>
{
    options.UseSqlServer(Configuration.GetConnectionString(ConnectionString.SqlServerExpress));
});
Run Code Online (Sandbox Code Playgroud)

更新

如果您不使用DI您可以IConfiguration手动访问。

首先你必须安装这个包

  • Microsoft.Extensions.Configuration.Json

  • Microsoft.Extensions.Configuration.FileExtensions

然后构建 IConfiguration

IConfiguration configuration = new ConfigurationBuilder()
   .AddJsonFile("appsettings.json", true,true)
   .Build();
optionsBuilder.UseSqlServer(configuration.GetConnectionString(ConnectionString.SqlServerExpress));

Run Code Online (Sandbox Code Playgroud)