防止某些Linq2Sql设计器代码覆盖

时间:2012-02-16 12:40:44

标签: c# linq-to-sql

我在VS 2010(C#.Net 4.0)中使用Linq2Sql来处理我的数据库访问。这一切都很有效。

但是因为我的DataContext位于我的Web应用程序(数据访问层)的单独层中,所以我将其配置为使用调用Web应用程序web.config文件中的连接字符串。

最终结果需要对Linq2Sql设计器文件(DB.designer.cs)进行一次更改,即覆盖第一个构造函数参数(默认情况下,在数据库连接字符串的字符串中)并将其替换为如下调用:

System.Configuration.ConfigurationManager.ConnectionStrings["CS"].ConnectionString

我目前似乎遇到的问题是,当我通过GUI设计器(拖放部分)更新设计器时,它会将此代码更改重置为硬编码连接字符串。

有人可以告诉我是否可以更改设置以防止此情况发生?或者我对部分课程做些什么?或者完全是另一种方式?

1 个答案:

答案 0 :(得分:2)

这是partial methods派上用场的地方!值得庆幸的是,LINQ2SQL DataContext加载了几个非常有用的。 假设您的DataContext在我的示例中名为AutosDataContext。在DBML旁边创建一个新类,并将其命名为AutosDataContext。然后按如下方式填写:

public partial class AutosDataContext
    {
        partial void OnCreated()
        {
            this.Connection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["CS"].ConnectionString;
        }
    }

在实例化DataContext之后立即调用部分OnCreated方法,并为您添加自定义连接字符串逻辑提供了理想的位置,而DBML设计人员在更新时不会在其上行走。