Linq to Sql - 根据环境变量动态设置连接字符串

Rya*_*yan 13 linq asp.net connection-string linq-to-sql

我需要根据环境变量将Linq的连接字符串设置为Sql.我有一个函数,它将根据环境变量从web.config返回连接字符串,但是如何让Linq始终使用这个"动态创建"的连接字符串(最好不必每次都指定它)?

我知道我可以使用构造函数指定连接字符串,但是在LinqDataSource中使用datacontext时它是如何工作的?

Jos*_*dan 18

使用:

MyDataClassesDataContext db = new MyDataClassesDataContext(dynamicConnString);
Run Code Online (Sandbox Code Playgroud)

对于LinqDataSource,拦截ContextCreating事件并手动创建DataContext,如上所示:

protected void LinqDataSource_ContextCreating(object sender, LinqDataSourceContextEventArgs e)
{
    e.ObjectInstance = new MyDataClassesDataContext (dynamicConnString);
}
Run Code Online (Sandbox Code Playgroud)

来自MSDN:

默认情况下,LinqDataSource控件创建ContextTypeName属性中指定的类型的实例.LinqDataSource控件调用数据上下文对象的默认构造函数来创建对象的实例.您可能必须使用非默认构造函数,或者必须创建与ContextTypeName属性中指定的对象不同的对象.在这种情况下,您必须处理ContextCreating事件并手动创建数据上下文对象.


Sar*_*shi 6

  • 打开LINQ to SQL设计器,打开设计器的Properties选项卡(架构本身),展开Connection并设置Application SettingsFalse.保存.

  • 关闭它并打开DataContext设计器文件(dbml_name.designer.cs)并更改DataContext构造函数.当您关闭应用程序范围的设置时,您将立即注意到您的连接字符串决定如何跳入此处.所以要关注的部分是改变base()继承者.在下面重命名ConnString以适合您自己的.我也注意到了一个DatabaseAttribute我认为不起作用的课程,并且对连接设置有任何影响.您还需要参考System.Configuration:

    public dbDataContext():base(ConfigurationManager.ConnectionStrings ["MyConnString"].ConnectionString,mappingSource)

  • 在LINQ to SQL类所在的项目中打开App.configWeb.config显示,并将连接字符串重命名为您定义为"MyConnString"的连接字符串.

  • 您现在必须通过更改名称来剪切整个条目,并将其粘贴到 要访问数据的应用程序App.configWeb.config其中,例如Web应用程序,Silverlight,WPF,WCF等.更改配置文件是很重要的.ConfigurationManager在LINQ to SQL类中定义的调用应用程序将访问数据,.config无论您的LINQ to SQL类在何处定义,都将查找执行调用应用程序的文件.正如您所看到的,它与以前的工作方式略有不同.

  • 现在右键单击并打开包含LINQ to SQL类的DAL或项目上的属性,并在"设置"选项卡上删除连接字符串"应用程序设置"参考.

  • 重建.你已经完成了,现在只需要在文件中查找,检查你知道的连接字符串中是否有你的数据库名称来检查任何落后者,不应该有任何.