我们有一个自定义函数AppSettings.GetConnectionString()
,它始终被调用以确定应该使用哪个连接字符串。如何工作对讨论来说不重要。可以简单地说它返回一个连接字符串,我必须使用它。
我希望我的 LINQ to SQL DataContext 使用这个连接字符串,因此我从 dbml 文件中删除了所有连接字符串信息,并创建了一个带有默认构造函数的部分类,如下所示:
public partial class SampleDataContext
{
public SampleDataContext() : base(AppSettings.GetConnectionString()) { }
}
在使用设计器将表格拖放到图表中之前,我的代码可以正常运行。但是一旦将表格拖放到图表中,会发生以下几件事:
- 会创建一个设置文件。
- 会创建一个 app.config 文件。
- 我的 dbml 文件将嵌入连接字符串。
所有这些都是在我保存文件之前完成的!当我保存图表时,设计器文件将被重新创建,并且它将包含自己的默认构造函数,该构造函数使用错误的连接字符串。这意味着我的 DataContext 现在有两个默认构造函数,我无法再编译代码了!
我可以撤消所有这些问题,但这很麻烦。每次更改后,我都必须手动删除连接字符串和新文件!
有没有办法阻止设计器在未经询问时进行这些更改?
编辑
在开发过程中,我被要求使用 AppSettings.GetConnectionString()
方法。我以前使用的方法与它生成的方法非常相似。现在有很多地方调用默认构造函数。我知道我可以将它们全部更改为以另一种方式创建数据上下文(使用不同的构造函数、静态方法、工厂等)。这种更改只会略微麻烦,因为只需要做一次。但是,我认为这是回避了真正的问题。dbml 文件和配置文件仍将包含一个不正确(如果未使用),可能会使其他开发人员困惑的连接字符串。