2016-05-02 164 views
0

如果使用Microsoft.Practices.EnterpriseLibrary,它使用web.config文件來設置數據庫配置和連接。這將如何與MVC6 .Net Core/Vnext一起工作?爲了得到這個工作?是否需要在啓動文件上設置?企業庫數據庫從web.config連接到Asp.net 5.0 Core vnext MVC6

的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; 

    } 

回答

-1

要使用的AppSettings的設置.json(或任何其他json文件)第一步是將文件添加到類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"] 

如果您有一個與json匹配的類,那麼您還可以獲取配置文件的各個部分。

Public class DataConfiguration 
{ 
    public string type { get; set; } 
    public bool RequirePermission { get; set; } 
} 

在啓動類的ConfigureServices()方法中,將該類的值添加到json文件的IoC容器中。

services.Configure<DataConfiguration>(Configuration.GetSection("Data:dataConfiguration")); 

這是你如何訪問類啓動的配置()方法,這些設置

DataConfiguration dataConfig; 
bool requirePermission; 

dataConfig= app.ApplicationServices.GetService<DataConfiguration>(); 
requirePermission = dataConfg.RequirePermission ; 

您也可以從由框架調用(因爲你實例化的類的任何類訪問設置位於IoC容器中)。

public class MyController : Controller 
{ 
    private IOptions<DataConfiguration> dataConfig; 

    public MyController(IOptions<DataConfiguration> dataConfig) 
    { 
     this.dataConfig= dataConfig; 
    } 

    ... 
} 
+0

當我碰到代碼行db = DatabaseFactory.CreateDatabase();我收到錯誤「配置文件沒有定義默認數據庫。」 – wolfeh

+0

這不適用於我企業庫數據庫無法定義默認數據庫。 – wolfeh

+0

對不起。我以爲你只需要一些關於如何使用ASP.NET Core應用程序設置的信息。對於需要XML的企業庫屬性,可以使用XmlSerializer類將配置類轉換爲XML。 –