【发布时间】:2018-11-29 22:40:42
【问题描述】:
我正在使用 asp.net core 2.1 API 并且我正在遵循 3 层架构。 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 中的示例 dB 调用方法:
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。请帮助我了解如何实现这一目标。
【问题讨论】:
标签: asp.net-core-2.1