2012-10-16 64 views
1

我正在使用下面的代碼創建與NHibernate Session Factory。我想用相對路徑指定此路徑,以便當我的隊友和我合併分支時,我們不必修復連接字符串。我怎樣才能做到這一點?NHibernate的相對路徑連接字符串

private static void InitializeSessionFactory(bool deleteSchemaOnClosing = false, bool regenerateSchemaOnOpening = false) 
{ 
_sessionFactory = Fluently.Configure() 
    .Database(MsSqlConfiguration.MsSql2008 
        .ConnectionString(
         @"Data Source=.\SQLEXPRESS;AttachDbFilename=""C:\MyProject\MyProjectCore\Fluent NHibernate\CoreDatabase.mdf"";Integrated Security=True;User Instance=True") 
        .ShowSql() 
    ) 
    .Mappings(m => 
       m.FluentMappings 
        .AddFromAssemblyOf<User>()) 
    .ExposeConfiguration(cfg => new SchemaExport(cfg) 
            .Create(deleteSchemaOnClosing,regenerateSchemaOnOpening)) 
    .BuildSessionFactory(); 
} 

app.config文件看起來像這樣:

<?xml version="1.0"?> 
<configuration> 
    <configSections> 
    </configSections> 
    <connectionStrings> 
     <add name="CoreDatabase.Properties.Settings.CoreDatabaseConnectionString" 
      connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\CoreDatabase.mdf;Integrated Security=True;User Instance=True" 
      providerName="System.Data.SqlClient" /> 
     <add name="Fluent_NHibernate.Properties.Settings.CoreDatabaseConnectionString" 
      connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\CoreDatabase.mdf;Integrated Security=True;User Instance=True" 
      providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup></configuration> 

謝謝你!

+0

可以將路徑添加到.config文件並使用「{0}」,ConfigFile Key ..來獲取。您也可以在.config文件中使用{0}參數以動態方式讀取值,這種更改只會發生在1個位置,而不是每次需要更改值時都要重新編譯代碼 – MethodMan

+0

Hi DJ KRAZE,你能不能爲我貶低它?我是一個完整的菜鳥。 – Kashif

回答

3

看看SqlConnectionStringBuilder,你可以這樣做:

var rawStr = Settings.CoreDatabaseConnectionString.ConnectionString; 
// retrieve the original connection string from config file 

var conBuilder = new SqlConnectionStringBuilder(rawStr); 
conBuilder.AttachDBFilename = Path.GetFullPath(
    Path.Combine(Environment.CurrentDirectory, "CoreDatabase.mdf")); 
// if you're doing this in a web environment, swap Environment.CurrentDirectory 
// for HttpRuntime.AppDomainAppPath 

_sessionFactory = Fluently.Configure() 
    .Database(MsSqlConfiguration.MsSql2008 
        .ConnectionString(conBuilder.ToString()) 
        .ShowSql() 
    ) 
// rest of your configuration... 
+0

嗨馬丁!感謝您的迴應。我想弄清楚如何使用'var rawStr = Settings.CoreDatabaseConnectionString.ConnectionString;'但它不起作用。我也嘗試過'var rawStr = ConfigurationManager.ConnectionStrings [「Fluent_NHibernate.Properties.Settings.CoreDatabaseConnectionString」] .ConnectionString;'這也不起作用。有什麼建議麼? – Kashif

+0

從你的app.config文件看起來你應該有一個叫做settings的類來包裝對連接字符串的訪問。如果沒有,ConfigurationManager.ConnectionStrings [「Fluent_NHibernate.Properties.Settings.Co reDatabaseConnectionString」]。ConnectionString應該工作 - 如果你這樣做會得到什麼錯誤? –

+0

嘗試使用「Fluent_Nhibernate.Properies ...」提取連接字符串會爲我產生一個空引用錯誤。這是由於ConfigurationManager包含兩個字符串,其中一個是'{data source =。\ SQLEXPRESS; Integrated Security = SSPI; AttachDBFilename = | DataDirectory | aspnetdb.mdf;用戶實例= true}',另一個是'null' – Kashif

0

作爲一個例子,你可以按照這樣的方式.. 這將是一種將值保存到.Config文件的方式,但只是給你一個如何在.Config文件中使用參數的例子。看這個。

我也將追加到我的回答更簡單的方法,如果你真正需要的例子

//Add config like this: 
<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <connectionStrings> 

    </connectionStrings> 
</configuration> 


Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
      config.ConnectionStrings.ConnectionStrings.Add(new ConnectionStringSettings(
                  "MyConnectionString", 
                  String.Format("DataSource={0};InitialCatalog={1};IntegratedSecurity={2}", 
                     "testing", "testing2", "Testing6"))); 
      config.Save(ConfigurationSaveMode.Modified, true); 
      ConfigurationManager.RefreshSection("connectionStrings"); 
      MessageBox.Show(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString) 

看看如何從配置文件讀取,以及嘗試鏈路上的示例代碼和步驟通它的代碼將是一個真棒學習經驗...... How to read Application Settings from .Config file

+0

嘿DJ KRAZE,你能幫我一個例子嗎? – Kashif

+0

我給你舉了一個例子,你有什麼問題..請粘貼或顯示代碼,你在實施Params示例感謝 – MethodMan

相關問題