Лучшие практики для использования строки подключения в Asp. Net Базовом приложении. - PullRequest
1 голос
/ 21 февраля 2020

Я не могу использовать EF, потому что он не работает с Oracle (или учебники, которые я нашел, устарели и не используются).

Я планирую использовать ODP. Net или Драйвер devart.

Каков наилучший способ использовать строку подключения из настроек приложения. json?

Я видел так много учебных пособий, которые являются неполными или не работают с Asp. Net Core 3.1

Мой контроллер

public class ReportController : Controller
{
    private readonly ConnectionString myString;
    public ReportController(IOptions<ConnectionString> connectionString)
    {
        myString = connectionString.Value;
    }

    public ActionResult Reporting_Totals()
    {
        string connectionString = myString.ToString();
        DataTable dt = new DataTable();
        using (OracleConnection oracleConnection = new OracleConnection())
        return View();
    }

Класс ConnectionString

public class ConnectionString
{        
    private string connectionString { get; set; }
    // enable set in singleton property instance to work correctly.
    //public static ConnectionString Instance { get; set; } = new ConnectionString();

    //public string DatabaseConnection { get; set; }
}

Мой класс запуска

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
        //configuration.GetSection("ConnectionString").Bind(ConnectionString.Instance);
    }

    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.Configure<ConnectionString>(Configuration.GetSection("ConnectionStrings"));
        services.AddControllersWithViews();
    }

Мои настройки приложений. json

  "ConnectionStrings": {
    "DEV": "Server=myServer;Database=myDb1;Trusted_Connection=True;",
    "PROD": "Server=myServer;Database=myDb2;Trusted_Connection=True;"

Ответы [ 2 ]

2 голосов
/ 21 февраля 2020

Есть ли какая-то особая причина, по которой вам нужен специальный ConnectionString class? Если вы просто хотите получить строку подключения, вы можете ввести IConfiguration напрямую и просто использовать метод расширения GetConnectionString.

public class ReportController
{
   private readonly string myString;

   public ReportController(IConfiguration configuration)
   {
      myString = configuration.GetConnectionString("DEV");
   }
}

/*
appsettings.json
{
   "ConnectionStrings": {
      "DEV": "<Your connection string>",
      "PROD": "<Your connection string>"
   }
}
*/

Приятно то, что до тех пор, пока вы можете загрузить конфигурирование через систему конфигурации .NET Core, вы можете использовать этот метод независимо от того, где хранятся строки подключения. Итак, если вы решите использовать Azure Key Vault или AWS, как предлагали другие люди, или настройки приложений. json для хранения ваших строк подключения, вы можете ввести IConfiguration и использовать GetConnectionString, пока есть поставщик конфигурации для хранения ваших секретов. Такой поставщик уже существует. json файлов и Azure Key Vault, я не знаю о AWS.

В одной другой заметке, вы могли бы взглянуть на Использовать несколько окружения в ASP. NET Core и используют разные параметры конфигурации для разных сред. Таким образом, вместо «DEV» и «PROD», являющихся ключами в вашей конфигурации «ConnectionStrings», вы можете использовать «Reports» или другое имя, которое описывает источник данных, к которому вы подключаетесь, и имеет другое Строка соединения для данной среды.

Например, с помощью настроек приложения. {Environment}. json files ...

public class ReportController
{
   private readonly string myString;

   public ReportController(IConfiguration configuration)
   {
      myString = configuration.GetConnectionString("Reports"); //Will give you the correct connection string based on your environment.
   }
}

/*
appsettings.Production.json
{
   "ConnectionStrings": {
      "Reports": "<Your production connection string>",
   }
}

appsettings.Development.json
{
   "ConnectionStrings": {
      "Reports": "<Your development connection string>"
   }
}
*/
0 голосов
/ 21 февраля 2020

Я полагаю, что лучший подход к этому - использование Dependency Injection:

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<ConnectionString>(Configuration.GetSection(nameof(ConnectionStrings))AddOptionsSnapshot<ConnectionStrings>();
    services.AddControllersWithViews();
}

Затем на контроллере:

internal ConnectionStrings ConnectionStrings
{
    get
    {
        return this.HttpContext.RequestServices.GetRequiredService<ConnectionStrings>();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...