2014-01-27 110 views
0

在我的web應用程序中,我使用由xml文件(nhibernate.cfg.xml)配置的NHibernate。我需要從我的C#代碼中的該文件讀取連接字符串。我的代碼正在工作,但我不喜歡它(特別是foreach!),我想直接查詢xml文件。我試圖用鏈接查詢它,但我總是得到空節點。 這裏是CFG文件:從C#讀取NHibernate配置文件

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
    <property name="connection.provider"> 
     NHibernate.Connection.DriverConnectionProvider 
    </property> 
    <property name="connection.driver_class"> 
     NHibernate.Driver.SqlClientDriver 
    </property> 
    <property name="connection.connection_string"> 
     Server=LEG\SQL12;initial catalog=DVR;user id=daniele;pwd=s; 
    </property> 
    <property name="dialect"> 
     NHibernate.Dialect.MsSql2008Dialect 
    </property> 
    </session-factory> 
</hibernate-configuration> 

這裏是我的C#代碼:

public static String GetConnectionString() 
{ 
    if (String.IsNullOrEmpty(_connectionString)) 
    { 
     XElement root = XElement.Load("hibernate.cfg.xml"); 
     var sessionFactoryNode = root.Elements().FirstOrDefault(); // session-factory 
     if (sessionFactoryNode != null) 
     { 
      var properties = sessionFactoryNode.Elements(); 
      foreach (var property in properties) 
      { 
       if (property.Attribute("name").Value == "connection.connection_string") 
        _connectionString = property.Value.Trim(); 
      } 
     } 
    } 
    return _connectionString; 
} 

我怎樣才能獲得相同的結果查詢的XML?

回答

0
XElement root = XElement.Load("hibernate.cfg.xml"); 
var connString = root.Descendants("property") 
      .Where(p => (string) p.Attribute("name") == "connection.connection_string") 
      .Select(p => (string) p) 
      .First(); 
+0

我試過這個,但root.Descendants(「屬性」)給我「枚舉沒有結果」。 –

+0

@DanieleArmanasco然後嘗試XDocument.Load而不是 –

+0

我試過XDocument,但得到了相同的結果... –