asp.net核心数据库连接问题

时间:2018-11-28 17:24:28

标签: asp.net-core-2.1

我正在使用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。请帮助我实现该目标。

1 个答案:

答案 0 :(得分:0)

连接字符串首先不应位于DAL层中。您可以在应用程序的启动中配置上下文,然后将上下文注入到存储库中或任何需要的上下文中。连接字符串保留在应用程序中。