企业库数据库连接从 web.config 到 Asp.net 5.0 Core vnext MVC6
Enterprise Library Database connection from web.config into Asp.net 5.0 Core vnext MVC6
如果使用 Microsoft.Practices.EnterpriseLibrary,它会使用 web.config 文件来设置数据库配置和连接。这将如何与 MVC6 .Net Core/Vnext 一起工作?为了让这个工作?启动文件需要设置什么吗??
Web.Config
<configSections>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" />
</configSections>
<dataConfiguration defaultDatabase="MyDBConnectionString" />
<connectionStrings>
<add name="MyDBConnectionString" connectionString="Data Source=MyDatabaseServer;Database=MyDatabase; Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
</connectionStrings>
appsettings.json
{
"Data": {
"dataConfiguration": {
"type":"Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"requirePermission": "false"
},
"DefaultConnection": {
"ConnectionString": "Data Source=MyDatabaseServer;Database=MyDatabase; Integrated Security=SSPI;",
"providerName": "System.Data.SqlClient"
}
},
数据访问
public static Model.Record GetRecordByID(Int32 ID)
{
//Declare the variables
Amendment obj = new Record();
object xml = null;
DbCommand dbCmd = null;
Database db = null;
try
{
// Create the database object, using the default database service. The
// default database service is determined through configuration.
DatabaseProviderFactory factory = new DatabaseProviderFactory(new SystemConfigurationSource());
DatabaseFactory.SetDatabaseProviderFactory(factory, false);
db = DatabaseFactory.CreateDatabase();
dbCmd = db.GetStoredProcCommand("spXMLGetRecordByID");
db.AddInParameter(dbCmd, "RecordID", DbType.Int32, ID);
db.AddInParameter(dbCmd, "@xml", DbType.Xml, 1);
if (!xml.Equals(DBNull.Value))
{
obj = (Amendment)Deserialize(xml.ToString(), typeof(Record));
}
}
catch (SqlException sqlEx)
{
// ExceptionUtility.SendError(sqlEx, "DAL", "GetRecordByID");
}
catch (Exception ex)
{
//ExceptionUtility.SendError(ex, "DAL", "GetRecordByID");
}
finally
{
// DALCleanUp(db, dbCmd);
}
return obj;
}
要使用 appsettings.json(或任何其他 json 文件)中的设置,第一步是将文件添加到 class Startup 中的 IConfigurationRoot 成员变量。此代码是在您使用 ASP.NET 5 模板创建项目时为您生成的。
public IConfigurationRoot Configuration { get; set; }
public class Startup
{
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
之后,您可以使用 IConfigurationRoot 成员变量访问 json 文件中的各个值。
this.Configuration["Data:DefaultConnection:ConnectionString"]
如果您的 class 与 json 相匹配,您还可以获得配置文件的部分内容。
Public class DataConfiguration
{
public string type { get; set; }
public bool RequirePermission { get; set; }
}
在 class Startup 的 ConfigureServices() 方法中,将 class 和 json 文件中的值添加到 IoC 容器中。
services.Configure<DataConfiguration>(Configuration.GetSection("Data:dataConfiguration"));
这就是您在 class Startup
的 Configure() 方法中访问这些设置的方式
DataConfiguration dataConfig;
bool requirePermission;
dataConfig= app.ApplicationServices.GetService<DataConfiguration>();
requirePermission = dataConfg.RequirePermission ;
您还可以从框架调用的任何 class 访问设置(因为您实例化的 class 在 IoC 容器中)。
public class MyController : Controller
{
private IOptions<DataConfiguration> dataConfig;
public MyController(IOptions<DataConfiguration> dataConfig)
{
this.dataConfig= dataConfig;
}
...
}
致所有试图在 ASP.NET 核心项目中使用 EnterpriseLibrary.NetCore 的人:
只有将配置存储在 app.config 文件中,才会读取配置。
如果您要将项目从 ASP.NET 迁移到 ASP.NET Core,您必须将 web.config 重命名为 app.config。
另见:
如果使用 Microsoft.Practices.EnterpriseLibrary,它会使用 web.config 文件来设置数据库配置和连接。这将如何与 MVC6 .Net Core/Vnext 一起工作?为了让这个工作?启动文件需要设置什么吗??
Web.Config
<configSections>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" />
</configSections>
<dataConfiguration defaultDatabase="MyDBConnectionString" />
<connectionStrings>
<add name="MyDBConnectionString" connectionString="Data Source=MyDatabaseServer;Database=MyDatabase; Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
</connectionStrings>
appsettings.json
{
"Data": {
"dataConfiguration": {
"type":"Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"requirePermission": "false"
},
"DefaultConnection": {
"ConnectionString": "Data Source=MyDatabaseServer;Database=MyDatabase; Integrated Security=SSPI;",
"providerName": "System.Data.SqlClient"
}
},
数据访问
public static Model.Record GetRecordByID(Int32 ID)
{
//Declare the variables
Amendment obj = new Record();
object xml = null;
DbCommand dbCmd = null;
Database db = null;
try
{
// Create the database object, using the default database service. The
// default database service is determined through configuration.
DatabaseProviderFactory factory = new DatabaseProviderFactory(new SystemConfigurationSource());
DatabaseFactory.SetDatabaseProviderFactory(factory, false);
db = DatabaseFactory.CreateDatabase();
dbCmd = db.GetStoredProcCommand("spXMLGetRecordByID");
db.AddInParameter(dbCmd, "RecordID", DbType.Int32, ID);
db.AddInParameter(dbCmd, "@xml", DbType.Xml, 1);
if (!xml.Equals(DBNull.Value))
{
obj = (Amendment)Deserialize(xml.ToString(), typeof(Record));
}
}
catch (SqlException sqlEx)
{
// ExceptionUtility.SendError(sqlEx, "DAL", "GetRecordByID");
}
catch (Exception ex)
{
//ExceptionUtility.SendError(ex, "DAL", "GetRecordByID");
}
finally
{
// DALCleanUp(db, dbCmd);
}
return obj;
}
要使用 appsettings.json(或任何其他 json 文件)中的设置,第一步是将文件添加到 class Startup 中的 IConfigurationRoot 成员变量。此代码是在您使用 ASP.NET 5 模板创建项目时为您生成的。
public IConfigurationRoot Configuration { get; set; }
public class Startup
{
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
之后,您可以使用 IConfigurationRoot 成员变量访问 json 文件中的各个值。
this.Configuration["Data:DefaultConnection:ConnectionString"]
如果您的 class 与 json 相匹配,您还可以获得配置文件的部分内容。
Public class DataConfiguration
{
public string type { get; set; }
public bool RequirePermission { get; set; }
}
在 class Startup 的 ConfigureServices() 方法中,将 class 和 json 文件中的值添加到 IoC 容器中。
services.Configure<DataConfiguration>(Configuration.GetSection("Data:dataConfiguration"));
这就是您在 class Startup
的 Configure() 方法中访问这些设置的方式DataConfiguration dataConfig;
bool requirePermission;
dataConfig= app.ApplicationServices.GetService<DataConfiguration>();
requirePermission = dataConfg.RequirePermission ;
您还可以从框架调用的任何 class 访问设置(因为您实例化的 class 在 IoC 容器中)。
public class MyController : Controller
{
private IOptions<DataConfiguration> dataConfig;
public MyController(IOptions<DataConfiguration> dataConfig)
{
this.dataConfig= dataConfig;
}
...
}
致所有试图在 ASP.NET 核心项目中使用 EnterpriseLibrary.NetCore 的人:
只有将配置存储在 app.config 文件中,才会读取配置。
如果您要将项目从 ASP.NET 迁移到 ASP.NET Core,您必须将 web.config 重命名为 app.config。
另见: