【问题标题】:asp.net core database connection issueasp.net核心数据库连接问题
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-13
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 2011-07-03
      相关资源
      最近更新 更多