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

时间:2009-07-27 15:49:45

标签: asp.net linq linq-to-sql connection-string

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

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

5 个答案:

答案 0 :(得分:18)

使用:

MyDataClassesDataContext db = new MyDataClassesDataContext(dynamicConnString);

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

protected void LinqDataSource_ContextCreating(object sender, LinqDataSourceContextEventArgs e)
{
    e.ObjectInstance = new MyDataClassesDataContext (dynamicConnString);
}

来自MSDN

  

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

答案 1 :(得分:6)

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

  • 关闭它并打开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等。更改要访问数据的调用应用程序的配置文件非常重要,因为LINQ to SQL类中定义的ConfigurationManager将查找.config文件从调用应用程序执行的位置开始,无论您的LINQ to SQL类在何处定义。正如您所看到的,它与以前的工作方式略有不同。

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

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

答案 2 :(得分:2)

答案 3 :(得分:2)

如果您不想将事件监听器添加到每个页面,可以按照此链接进行操作 http://goneale.com/2009/03/26/untie-linq-to-sql-connection-string-from-application-settings/

答案 4 :(得分:1)

如果要实现OnCreated()函数,可以动态更改连接字符串。此函数是一个部分函数,​​它可以在除dbml存在之外的单独文件中实现。

详情请见本文

http://aspilham.blogspot.com/2011/01/how-do-i-set-connection-string-in-linq.html