Проблема с подключением к базе данных ядра asp.net

Я работаю в asp.net core 2.1 API и следую трехуровневой архитектуре. API - Бизнес-уровень - Уровень доступа к данным

В настоящее время у меня проблема с подключением к базе данных. Я не знаю, как передать строку подключения из API в DAL. Ниже пример кода, который я пробовал, но не работает.

public class CustomerDB : DbContext
    {

public CustomerDB (DbContextOptions<CustomerDB> options)
            : base(options)
        {

        }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
                optionsBuilder.UseSqlServer(//ConnectionString);
            }
        }

}

Запуск .cs

public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }
            services.AddDbContext<CustomerDB>(options => options.UseSqlServer(Configuration.GetConnectionString("ConnectionString")));
}

пример метода вызова дБ в DAL:

Datatable dtCustomers = new Datatable();
            using (CustomerDB dbConnect = new CustomerDB ())
            {
                dbConnect.Database.OpenConnection();
                DbCommand cmd = dbConnect.Database.GetDbConnection().CreateCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "dbo.Getcustomers"; 
                using (var reader = cmd.ExecuteReader())
                {
                    //parse and bind the reader data to datatable
                }
                return dtCustomers 
            }
        }

Не уверен, кто получит строку подключения и передаст ее методу onconfiguring. Я попытался создать строку подключения на этом уровне DAL (жестко запрограммированный), и это сработало. как показано ниже

public class CustomerDB : DbContext
    {

public CustomerDB (DbContextOptions<CustomerDB> options)
            : base(options)
        {

        }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
                optionsBuilder.UseSqlServer("Server=178.40.132.28;Initial Catalog=customers;User ID=XXXXXX;Password=XXXX;Trusted_Connection=False");
            }
        }

}

но я не хочу жестко кодировать этот DAL. он должен исходить из API. пожалуйста, помогите мне, как этого добиться.


person user2631832    schedule 28.11.2018    source источник


Ответы (1)


Строка подключения вообще не должна находиться на вашем уровне DAL. Вы настраиваете свой контекст при запуске приложения, а затем вставляете контекст в свой репозиторий или в то, что в нем нуждается. Строка подключения остается в приложении.

person Chris Pratt    schedule 29.11.2018