Я работаю в 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. пожалуйста, помогите мне, как этого добиться.