Dynami c настройки приложения строк подключения. json Asp .NetCore - PullRequest
0 голосов
/ 05 августа 2020

Я действительно новичок в этой разработке API, поэтому у меня следующий вопрос.

Возможно ли получить имя БД во время выполнения для моей строки подключения? Это потому, что пользователь будет отправлять имя БД через файл Json. Я работаю с Visual Studio 2019, NetCore 3.1.

У меня есть настройки приложения. json вот так:

"ConnectionStrings": {
    "ImportConnection": "Data Source=SQLSERVER;Initial Catalog={dbName};User ID=Id;Password=Pass;MultipleActiveResultSets=True"
  },

И мой Startup.cs в configureservices у меня это

services.AddDbContext<ApplicationDBContext>(options => options.UseSqlServer(Configuration.GetConnectionString("ImportConnection")));

Пользователь отправляет файл Json со следующей структурой

{
    "ImportTypeId": 1,
    "Data": [
        {
            "LayoutID": 6,
            "ClientID": "XXX",

Где ClientID - это имя БД.

Я действительно хочу знать, есть ли способ чтобы заменить исходный каталог {dbName} в моей connectionString значением ClientID.

Также это мой DbContext

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace API_Test.Models
{
    public class ApplicationDBContext : IdentityDbContext<ApplicationUser>//DbContext
    {
        public ApplicationDBContext(DbContextOptions<ApplicationDBContext> options) : base(options)
        {

        }
        public DbSet<DataModel> API_DATA { get; set; }
    }
}

Большое спасибо

1 Ответ

0 голосов
/ 06 августа 2020

Вы можете использовать класс SqlConnectionStringBuilder в сочетании с аргументами командной строки для удовлетворения требований. Однако предоставленное решение не обрабатывает ввод командной строки как json. Ожидается, что ввод будет обычным параметром командной строки. Я бы порекомендовал вам вернуться к этому еще раз и проверить, может ли ваш пользователь преобразовать json в список параметров и передать его приложению

Итак, допустим, пользователь запускает приложение со следующими параметрами:

dotnet run --ClientID XXX

Внутри Program.cs убедитесь, что аргументы командной строки передаются в метод CreateDefaultBuilder(), потому что это метод, который внутренне анализирует все аргументы командной строки и добавляет их к объекту конфигурации.

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });

Теперь вы можете переопределить значение базы данных внутри вашего startup.cs, как показано в строке:

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(Configuration.GetConnectionString("ImportConnection"));

if (!string.IsNullOrEmpty(Configuration.GetValue<string>("ClientID")))
{
    builder.InitialCatalog = Configuration.GetValue<string>("ClientID");
}

services.AddDbContext<ApplicationDBContext>(options => options.UseSqlServer(builder.ConnectionString));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...