2010-03-04 48 views
2

首先,通過遠程我的意思是我們網絡上的中央專用SQL Server。通過本地我的意思是本地SQL Express安裝。使用Linq將本地和遠程之間的`ConnectionStrings`切換爲SQL

我的情況僅限於內部。沒有云服務,外部網站等。我的應用程序允許用戶斷開連接,但爲了最大限度地減少流量和其他一些問題,我希望允許它們直接連接到中央服務器,只要它是可用的, /或者當他們選擇中央服務器時設置設置。

設置非常簡單。每個人的本地連接字符串是像這樣 - >

Data Source=.\SQLEXPRESS;Initial Catalog=MemberCenteredPlan;Integrated Security=True

和中央SQL連接字符串,像這樣 - >

Data Source=CentralSQL;Initial Catalog=MemberCenteredPlan;Integrated Security=True

而且,我的數據是在一個單獨的項目從我的用戶界面,因此我有困難搞清楚如何從UI層的數據層訪問設置文件。

我應該爲所有方法添加一個參數並將IsOnline變量傳遞給它們嗎?似乎重複,但如果我知道更好的方式,我不會在第一個地方張貼。

感謝您的幫助!

This is a very similar post但我想知道當我想在運行期間在本地數據庫和遠程數據庫之間切換時,建議是否有所不同。我用

回答

3

一個選項是在這種情況下,以創建DataContext的方法(在部分類):

public static DataContext New 
{ 
    get 
    { 
    var cs = IsConnected ? CentralConnectionString : LocalConnectionString; 
    return new DataContext(cs); 
    } 
} 

但是你想要的自動切換你可以最多牛肉那個開關邏輯。然後,在代碼中引用,只是用這樣的格式:

var DB = DataContext.New; 
var result = from a in DB..... 

它使你的DataContext創建邏輯在一個地方,它是否適合你的需要,我覺得它簡化了的東西無處不在。

+0

聽起來不錯,我想我失去了一些東西。 'IsConnected' ...我會在UI中設置它,可能你會怎麼做呢?我曾想過將它綁定到應用程序設置,但我似乎無法從數據層訪問它。我會回到傳遞給每個電話嗎? – 2010-03-04 13:33:09

+0

@Refracted Paladin - 無論你想要什麼,你都可以訪問它,不管它是自動確定還是喜歡James的答案。你根本不需要傳遞它,只需要靜態地獲取它。如果您需要AppSettings方法,ConfigurationManager.AppSettings是最簡單的賭注。 – 2010-03-04 14:51:37

+0

當我第一次讀這篇文章時,我假設你的意思是爲我創建一個針對每個數據上下文(ConnectDataContext,CMODataContext,MCPDataContext)的分類,正確嗎?否則,你的意思是讓我爲'System.Data.Linq.DataContext'創建一個部分類? – 2010-04-13 15:35:21

2

要回答你在尼克答案中的評論中提出的問題,他的IsConnected是添加到部分類的屬性。您可以將其定義爲無論如何在程序中確定該狀態的方法。如果它是一個AppSetting值,它會是這樣的:

public static bool IsConnected 
{ 
    get 
    { 
     return ConfigurationManager.AppSettings["Online"] == "true"; 
    } 
} 
+0

謝謝你回答我的評論問題。對不起,我將開始一個新的線程,因爲它實際上是一個用戶設置,我似乎無法使用ConfigurationManager在DATA層訪問它。感謝您的指導。 – 2010-03-04 15:37:19

相關問題