阻止LINQ to SQL dbml在将表拖入dbml文件时更新连接字符串

12
每当我将修改过的表格拖入我的dbml中,VS2010都要求我更新连接字符串,尽管我已经使用完全相同的信息创建了数据连接。每次发生这种情况,它都会将我的连接字符串更改为“DataSourceConnectionString”,我必须从5个不同的文件中删除它,并用先前使用的连接字符串名称替换它,以便不会影响通过源代码控制使用该文件的其他人。有什么想法吗?
3个回答

21

在尝试解决一些相关问题后,我找到了另一种方法。

为了解决我遇到的问题,我需要从VS2010的服务器资源管理器窗口中删除创建用于连接数据库的数据连接。然后你需要打开.dbml设计器,在白色空间中右键单击并选择属性。属性窗口将打开,并且将有一个“连接”部分,请单击小箭头以展开它。如果你点击连接字符串行,将会出现一个带有点(...)的按钮。当你点击此按钮时,它将打开一个“连接属性”窗口。这个窗口已经具有与.dbml相同的所有连接属性。你只需点击“确定”,它就会自动为你创建一个数据连接,该连接不会在你将新对象拖到其中时导致你添加新的连接字符串到.dbml中!

耶!每次更新时不再需要删除额外的连接字符串了!:D


1
这真是太奇怪了,但非常感谢。我讨厌微软停止开发LINQ to SQL。用Entity Framework重新构建所有东西太费力了。 - Olaj
起初,我错过了在服务器资源管理器中删除我创建的连接的步骤,并认为这个解决方案不起作用,但在仔细阅读您的答案并准确地按照您的步骤操作后,我非常高兴地发现它确实有效。感谢您找到了如何做到这一点,这让我困扰了多年! - Sheridan
今天这个方法对我也起作用了,但是还需要一个额外的步骤。在单击连接窗口上的“确定”后,服务器资源管理器没有立即显示我感兴趣的连接。我尝试刷新服务器资源管理器连接列表,但一直失败。我首先必须删除一些无效的连接,然后刷新才能正常工作,并且缺失的连接会按照预期重新出现。非常感谢,这真的帮了我大忙! - Ted Krapf

2
当你实例化DataContext时,请使用允许你指定连接字符串的重载。这将覆盖设计器放置在那里的任何值。例如,不要仅仅使用以下代码:
DataClasses1DataContext db = new DataClasses1DataContext();

使用:

DataClasses1DataContext db = new DataClasses1DataContext("..connection string..");

或者

DataClasses1DataContext db = new DataClasses1DataContext(ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString);

希望这正是您需要的内容。

我没有想到这个。因为我有需要调用静态类的 DataContext 实例化,所以如果要打一百万次那将是很麻烦的事情。实际上,我昨天已经解决了这个问题,但是我已经遇到这个问题几个月了,所以我想在这里发布它以供其他人参考。感谢您的回复。 - Chris - Haddox Technologies
似乎VS 2012终于做对了,不再将连接字符串写死在代码里。在VS 2012中,使用没有参数的方式实例化数据上下文将调用一个构造函数,该函数从web.config中的AppSettings读取值。可以在dbml文件的属性选项卡中更改/设置使用的AppSettings键。 - Old Geezer

0
使用文本编辑器打开 .dbml 文件并手动删除连接字符串。连接字符串通常长这样:
<Connection Mode="" >

然后,您可以按照以下方式使用自己的部分类

public partial class MyDataContext : DataContext
{
    public MyDataContext() : base(ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString)
    {
        OnCreated();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接