2009-11-24 35 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(); 
    }