我需要根据环境变量对LINQ我的连接字符串设置为SQL。 我有这将基于环境变量的web.config中返回的连接字符串的函数,但我怎么得到的LINQ to一直使用这种“动态创建”连接字符串(最好无需指定它每次)?
我知道我可以指定使用构造连接字符串,但使用中的LinqDataSource DataContext的时候是如何运作的?
我需要根据环境变量对LINQ我的连接字符串设置为SQL。 我有这将基于环境变量的web.config中返回的连接字符串的函数,但我怎么得到的LINQ to一直使用这种“动态创建”连接字符串(最好无需指定它每次)?
我知道我可以指定使用构造连接字符串,但使用中的LinqDataSource DataContext的时候是如何运作的?
使用:
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事件并手动创建数据上下文对象。
打开了LINQ to SQL设计,并打开设计(架构本身)的属性选项卡中,展开连接并设置Application Settings
,以False
。 保存。
关闭下来,并打开你的DataContext设计文件(dbml_name.designer.cs)和改变的DataContext构造函数。 您将立即通知你的连接字符串是如何决定在这里跳为你关闭的应用程序范围的设置。 因此,部分集中在这里被改变base()
继承。 重命名CONNSTRING”下方,以满足您自己的。 我还注意到一个DatabaseAttribute
上,我不认为扮演一个重要组成部分,对连接设置任何影响的类。 您还需要一个参考System.Configuration
:
公共dbDataContext():碱(ConfigurationManager.ConnectionStrings [ “MyConnString”]的ConnectionString,mappingSource)
打开App.config
或Web.config
在你的LINQ to SQL类所在的项目特色,并在连接字符串重命名为您定义什么是“MyConnString”。
现在,必须切断与名称更改整个条目,并将其粘贴到要么App.config
或Web.config
是访问数据,如Web应用程序,Silverlight的,WPF,应用程序的WCF等,这是非常重要的你改变了调用应用程序是访问数据的配置文件,如ConfigurationManager
在LINQ定义为SQL类将寻找.config
从那里调用应用程序是从执行文件,无论在哪里你的LINQ to SQL类已经确定。 正如你所看到的,它的工作原理有点不同于之前。
现在,点击鼠标右键,打开您的DAL或包含您的LINQ to SQL类项目的属性,并删除在设置选项卡上的连接字符串“应用程序设置”参考。
重建。 大功告成,现在只是做一个在文件中查找支票,你知道在连接字符串中是精选检查任何散兵游勇也许你的数据库名称,不应该有任何。
DataContext类有一个构造函数连接字符串中 。
如果你不希望将事件侦听器添加到每个页面,您可以点击此链接http://goneale.com/2009/03/26/untie-linq-to-sql-connection-string-from-application-settings/
您可以动态地更改连接字符串,如果你将实现OnCreated()函数。 这个函数是一个部分功能,它可以在不到哪里,你的dbml存在其他单独的文件来实现。
详细请参阅本文
http://aspilham.blogspot.com/2011/01/how-do-i-set-connection-string-in-linq.html