2013-10-04 19 views
0

我創建了安裝程序項目到我的.NET應用程序。安裝程序還將所需的SQLite文件安裝到特殊文件夾 - >用戶的應用程序數據漫遊文件夾(C:\ Users \ Xxxx \ AppData \ Roaming \ MyCompany)中。實體框架從用戶的應用程序數據文件夾讀取SQLite數據庫

應用程序使用實體框架訪問的SQLite文件和開發過程中我已經配置實體框架在我的本地計算機上的文件夾中使用SQLite工作。我不知道如何配置實體框架從用戶的應用程序數據文件夾讀/寫。

回答

0

的連接字符串的SQLite文件不允許相對路徑。 當部署應用程序時,您有2個選項:

1-在app.config相關文件 - > connectionString部分中手動更改路徑爲您的SQLite數據庫文件。 我覺得不是一個乾淨的解決方案。

2-嘗試以編程更改應用程序的或就deployement開始時的配置。這裏的示例代碼如何實現:

string _EntityContainerName = "";//Ur entity container name 
       Configuration _Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
       //DataSource 
       System.Data.SQLite.SQLiteConnectionStringBuilder _SqlBuilder = new System.Data.SQLite.SQLiteConnectionStringBuilder(); 
       _SqlBuilder.DataSource = @"C:\Users\Xxxx\AppData\Roaming\MyCompany\{UrSQLiteFileName}.s3db"; 
       string _ProviderString = _SqlBuilder.ToString(); 
       //ConnectionString 
       EntityConnectionStringBuilder _DataEntityBuilder = new EntityConnectionStringBuilder(); 
       _DataEntityBuilder.Provider = "System.Data.SQLite"; 
       _DataEntityBuilder.ProviderConnectionString = _ProviderString; 
       _DataEntityBuilder.Metadata = string.Format(@"res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", _EntityContainerName); 
       string _DataConnectionString = _DataEntityBuilder.ToString(); 
       _Configuration.ConnectionStrings.ConnectionStrings[_EntityContainerName].ConnectionString = _DataConnectionString; 
       _Configuration.ConnectionStrings.ConnectionStrings[_EntityContainerName].ProviderName = "System.Data.EntityClient"; 
       _Configuration.Save(System.Configuration.ConfigurationSaveMode.Modified, true); 
       ConfigurationManager.RefreshSection("connectionStrings"); 

希望將有所幫助。

+0

感謝您的幫助。我實際上從另一個問題找到了一個很好的解決方案http://stackoverflow.com/questions/15037937/appdata-in-connection-string-is-not-substituted-for-the-actual-folder其中連接字符串指向DataDirectory和在應用程序啓動時設置。 – Nuts

相關問題