2

我的解決方案有兩個項目。一個類庫,用於通過存儲庫類從實體框架.edmx文件生成數據。 App.Config文件connectionString與我的第二個ASP.Net 4.0 Web窗體項目中的Web.config匹配。web.config和app.config中的不同實體框架連接字符串問題

我將BOTH connectionStrings修改爲在部署到測試服務器時指向測試數據庫(DataSource = TestDB)。在部署到活動站點時,我將兩者都修改爲指向活動數據庫(DataSource = LiveDB)。

在Site.Master的頂部,我用標籤控件中的紅色字母「您連接到TEST數據庫」顯示。我有條件地切換標籤的.Visible屬性if (context.Connection.DataSource.Contains("TestDB"))

在開發過程中,我注意到一些奇怪的東西。當Web.config指向TestDB時,如果我忘記使App.config匹配(並指向LiveDB),則會顯示「連接到測試」警告,但會顯示來自LiveDB的數據。

這告訴我存儲庫(類庫)使用App.Config,但在Web窗體項目中創建的數據上下文使用Web.config connectionString。那是對的嗎?我擔心,如果我部署到測試站點並忘記將App.Config指向TestDB,則實時數據將不正確地更新。

所以我的問題是,在這種情況下...... 什麼是最好的方式來顯示通知「連接到測試數據庫」總是準確的?

回答

4

默認情況下,類庫不會使用任何app.config文件。

它將使用位於應用程序上下文中的.config文件 - 對於Web應用程序,該文件將是web.config文件。

+0

但在我的情況下,這似乎並不是真實的。爲什麼當Web.config指向測試並且App.Config指向活的時候顯示實時數據? – DeveloperDan 2012-08-17 14:05:38

+0

@DeveloperDan - 您確定沒有直接加載配置,使用'ConfigurationManager'上的'Open * Configuration'方法之一? – Oded 2012-08-17 14:09:13

+0

我沒有使用ConfigurationManager。類庫.edmx是使用嚮導和數據庫更新模型構建的。在我的Web窗體應用程序中,我執行:MyDataProject.MyEnities context = new MyDataProject.MyEnities()然後在問題中使用if語句。 – DeveloperDan 2012-08-17 14:14:19

0

當應用程序運行時,它使用web.config中的一個,無論創建上下文的位置如何。

爲什麼不在實時應用程序上設置防火牆以防止從(a)除直播網絡服務器之外的任何地方進行訪問,或者(b)特別是您的測試位置?

+0

但在我的情況下,這似乎並不正確。爲什麼當Web.config指向測試並且App.Config指向活的時候顯示實時數據?我會研究設置防火牆。 – DeveloperDan 2012-08-17 14:07:00

+0

你是否以深奧的方式閱讀你的配置文件? – podiluska 2012-08-17 14:08:23

+0

類庫.edmx是使用嚮導和數據庫更新模型構建的,因此它是標準的。在我的Web窗體應用程序中,我執行:MyDataProject.MyEnities context = new MyDataProject.MyEnities()然後在問題中使用if語句。這對我來說似乎並不深奧。 – DeveloperDan 2012-08-17 14:12:53