web-dev-qa-db-ja.com

.NET Coreで接続文字列を読み上げる方法

設定ファイルから接続文字列だけを読み込み、プロジェクトに「appsettings.json」という名前のファイルを追加して、その内容を追加します。

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

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

ASP.NETではこれを使いました。

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

さて、どうすればC#で "DefaultConnection"を読み、それを.NET Coreの文字列変数に格納することができますか?

71
motevalizadeh

これを行うには、GetConnectionString拡張メソッドを使用します。

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

System.Console.WriteLine(conString);

またはDI用の構造化クラスを使用すると、

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

起動:

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"));

そして、ホームコントローラーで:

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();
    }

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"
  }
63
Stefan Steiger

投稿された答えは良いのですが、私が接続文字列を読んでいるのと同じ質問に直接答えたのではありません。多くの検索を通じて、私はこれを行うための少し簡単な方法を見つけました。

Startup.csに

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

あなたのコントローラで、コンストラクタの設定とそれに対するパラメータのフィールドを追加します。

private readonly IConfiguration configuration;

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

今すぐあなたのビューコードの中であなたはそれにアクセスすることができます:

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

詳細についてはリンクを参照してください。 https://docs.Microsoft.com/ja-jp/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")));
}
8
markokstate

私がこれを解決するために見つけた方法は、(appsettings.jsonファイルに格納されている設定を見つけることを可能にする)ビルダーの中でAddJsonFileを使い、それからprivate _config変数を設定することでした。

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();
    }

そして、私は次のように設定文字列を設定することができます:

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

これはdotnet core 1.1にあります

3
Alex White
0
Ivano Scifoni

私は。NETコアと.NETフレームワークの両方で動作するデータアクセスライブラリを持っています。

接続文字列を "app.config"という名前のXMLファイルに保存し(これもWebプロジェクトの場合)、それを「出力ディレクトリへのコピー」としてマークするというトリックが.netコアプロジェクトにありました。

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

ConfigurationManager.ConnectionStrings - 接続文字列を読み込みます。

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