企业库数据库连接从 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。

另见: