2009-11-24 51 views
8

在Subversion中使用我的源代碼時,我遇到了兩臺不同計算機有不同連接字符串的問題。在LINQ to SQL下管理不同開發人員的連接字符串

LINQ to SQL設計器似乎只喜歡具有相同的連接字符串。

設計師可以使用連接字符串,因爲開發人員具有不同的本地配置,但實際使用的Web應用程序從web.config中獲取?

回答

4

不幸的是,這是LINQ to SQL設計人員痛苦的巨大來源。我不知道如何強制Visual Studio在您將表格或存儲過程拖放到設計界面時從不添加默認連接字符串。

我們解決正是如此問題:

  1. 我們從來沒有拯救我們的開發密碼
  2. 我們從來不使用默認的連接字符串中的代碼時newing了一個DataContext
  3. 因此,我們可以「安全地」忽略碰撞數據層的衝刺期間的多個連接字符串當事情停止/變得更加穩定時,我們使用設計器表面本身的屬性或通過編輯XML從數據上下文中刪除連接字符串。在這一點上,它取決於數據上下文的修飾符,以跟上刪除默認連接字符串。

唉,這不是一個理想的情況。希望VS2010能夠「解決」這個問題。

+3

VS2010 Beta 2沒有解決這個問題。 – MikeD 2010-01-24 04:18:59

+1

看來VS2013還沒有得到這個固定。 – 2014-04-25 02:41:12

1

我遇到了這個問題,發現你的問題。以下是我們現在使用的解決方案:

  1. 使用集中式配置類從文件系統上的特定位置檢索配置值。這允許運行代碼的每臺機器使用自己的配置值。

  2. 爲LINQ to SQL數據上下文創建一個部分類。添加一個不帶參數的自定義構造函數,並從上述的Configuration類中檢索數據庫連接字符串。

例如:

public partial class MyCustomDBDataContext 
{ 
    public MyCustomDBDataContext() : 
       base(Configuration.GetDatabaseConnectionString()) 
    { 
    } 
} 

這個現在應該解決的問題無論對於開發者和在部署到測試和生產。

+0

只是試圖爲我的項目實現這一點,但即時通訊錯誤「已經爲...定義一個方法」,因爲它現在有2個默認構造函數的聲明。 – dkarzon 2010-03-24 23:22:04

+0

我知道這是一箇舊的評論,但無論...從一個* open *和* focused * .dbml的「Properties」面板,您需要展開「Connection」,然後將「Application Settings」設置爲'False'。這將從dbml的designer.cs中刪除無參數的構造函數,這意味着您的部分類中的構造函數將不再發出「已定義」錯誤。一個缺點是,如果您刪除/添加一個表到dbml,它將重置連接字符串並將應用程序設置重新設置爲True。是的,這很煩人。 – 2011-04-21 00:35:32

1

通過以下對How Do I? Change Connection String of datacontext default constructor from web.config我的應用程序的指導方針現在使用不同的ConnectionStrings取決於如果HttpContext.Current.Request是本地的。

//using System.Web.Configuration; 

partial void OnCreated() 
    { 
     //Change this condition to your needs 
     var isLocal = HttpContext.Current.Request.IsLocal; 
     this.Connection.ConnectionString = WebConfigurationManager.ConnectionStrings[isLocal ? "localConnectionstring" : "otherConnectionstring"].ToString(); 
    }