web-dev-qa-db-de.com

Wie lese ich eine Verbindungszeichenfolge in .NET Core?

Ich möchte nur eine Verbindungszeichenfolge aus einer Konfigurationsdatei lesen und dazu meinem Projekt eine Datei mit dem Namen "appsettings.json" hinzufügen und diesen Inhalt hinzufügen:

{
"ConnectionStrings": {
  "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-

 WebApplica71d622;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
    "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
    "Default": "Debug",
    "System": "Information",
    "Microsoft": "Information"
   }
 }
}

In ASP.NET habe ich Folgendes verwendet:

 var temp=ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;

Wie kann ich nun "DefaultConnection" in C # lesen und in einer Zeichenfolgenvariablen in .NET Core speichern?

81
motevalizadeh

Sie können dies mit der Erweiterungsmethode GetConnectionString tun:

string conString = Microsoft
   .Extensions
   .Configuration
   .ConfigurationExtensions
   .GetConnectionString(this.Configuration, "DefaultConnection");

System.Console.WriteLine(conString);

oder mit einer strukturierten Klasse für DI:

public class SmtpConfig
{
    public string Server { get; set; }
    public string User { get; set; }
    public string Pass { get; set; }
    public int Port { get; set; }
}

Anlaufen:

public IConfigurationRoot Configuration { get; }


// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
    // http://developer.telerik.com/featured/new-configuration-model-asp-net-core/
    // services.Configure<SmtpConfig>(Configuration.GetSection("Smtp"));
    Microsoft.Extensions.DependencyInjection.OptionsConfigurationServiceCollectionExtensions.Configure<SmtpConfig>(services, Configuration.GetSection("Smtp"));

Und dann im Home-Controller:

public class HomeController : Controller
{

    public SmtpConfig SmtpConfig { get; }
    public HomeController(Microsoft.Extensions.Options.IOptions<SmtpConfig> smtpConfig)
    {
        SmtpConfig = smtpConfig.Value;
    } //Action Controller


    public IActionResult Index()
    {
        System.Console.WriteLine(SmtpConfig);
        return View();
    }

mit diesem in appsettings.json:

"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-WebApplica71d622;Trusted_Connection=True;MultipleActiveResultSets=true"
},

"Smtp": {
    "Server": "0.0.0.1",
    "User": "[email protected]",
    "Pass": "123456789",
    "Port": "25"
  }
72
Stefan Steiger

Die gepostete Antwort ist in Ordnung, hat aber nicht direkt die Frage beantwortet, die ich zum Einlesen einer Verbindungszeichenfolge hatte. Durch viel Suchen fand ich einen etwas einfacheren Weg, dies zu tun.

In Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    ...
    // Add the whole configuration object here.
    services.AddSingleton<IConfiguration>(Configuration);
}

Fügen Sie in Ihrem Controller ein Feld für die Konfiguration und einen Parameter für einen Konstruktor hinzu

private readonly IConfiguration configuration;

public HomeController(IConfiguration config) 
{
    configuration = config;
}

Jetzt können Sie später in Ihrem Ansichtscode wie folgt darauf zugreifen:

connectionString = configuration.GetConnectionString("DefaultConnection");
78
Brad Patton

Siehe Link für weitere Informationen: https://docs.Microsoft.com/en-us/ef/core/miscellaneous/connection-strings

[~ # ~] json [~ # ~]

    {
      "ConnectionStrings": {
        "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
      },
    }

C # Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<BloggingContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("BloggingDatabase")));
}
13
markokstate

Als Lösung habe ich AddJsonFile in einem Builder beim Start verwendet (mit dessen Hilfe die in der Datei appsettings.json gespeicherte Konfiguration gefunden werden kann) und anschließend eine private _config-Variable festgelegt

public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
        _config = builder.Build();
    }

Und dann könnte ich die Konfigurationszeichenfolge wie folgt festlegen:

var connectionString = _config.GetConnectionString("DbContextSettings:ConnectionString"); 

Dies ist auf Dotnet Core 1.1

4
Alex White
0
Ivano Scifoni

ich habe eine Datenzugriffsbibliothek, die mit .NET Core und .NET Framework funktioniert.

der Trick bestand in .NET-Kernprojekten darin, die Verbindungszeichenfolgen in einer XML-Datei mit dem Namen "app.config" (auch für Webprojekte) zu speichern und als "In Ausgabeverzeichnis kopieren" zu markieren.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="conn1" connectionString="...." providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

ConfigurationManager.ConnectionStrings - liest die Verbindungszeichenfolge.

    var conn1 = ConfigurationManager.ConnectionStrings["conn1"].ConnectionString;
0
shaig