我正在使用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。请帮助我实现该目标。
答案 0 :(得分:0)
连接字符串首先不应位于DAL层中。您可以在应用程序的启动中配置上下文,然后将上下文注入到存储库中或任何需要的上下文中。连接字符串保留在应用程序中。