LINQ to SQL connectionstring

我有一个应用程序,我希望能够为我的LINQ to SQL配置连接字符串。 我已经尝试了很多不同的方法,但似乎无法让它发挥作用。 我想在运行应用程序时在代码中动态执行此操作,原因是用户可以更改连接设置。

如果我从app.config中删除connectionString,应用程序仍然正常(通信),这让我想知道我应该在哪里更改连接字符串?

我认为最好的方法是结合Albin和Rup的答案。 在配置文件中有一个值,然后在运行时读取它并将其提供给上下文构造函数,如下所示:

WEB.CONFIG:

   

码:

 //read value from config var DBConnString = System.Configuration.ConfigurationManager.AppSettings("ConString"); //open connection var dataContext= new MyDataContext(sDBConnString) 

这样,您甚至可以在运行时更改连接字符串,它将工作并更改正在运行的程序。

您可以将覆盖连接字符串传递给DataContext构造函数 :

 var db = new MyDataContext("Data Source=Something Else;") 

DBML类(YourDataContext)有一个重载的构造函数,它接受ConnectionString,因此请尝试实例化而不是默认的。从app.config获取连接字符串并使用它来创建实例。

 YourDataContext context = new YourDataContext (ConfigurationManager.ConnectionStrings["ConnStringInAppConfig"].ConnectionString) 

你应该在app.config中更改它。 它没有的原因是LINQ2SQL设计器创建了设计DBML时使用的连接字符串的回退。 如果在app.config中定义连接字符串,则使用该字符串。

默认情况下,您的构造函数如下所示

 public dbDataContext() : base(global::invdb.Properties.Settings.Default.Enventory_4_0ConnectionString, mappingSource) { OnCreated(); } 

您可以更改返回值而不是

 //Original public string Enventory_4_0ConnectionString { get { return ((string)(this["Enventory_4_0ConnectionString"])); } } 

这个

 //Modified code public string Enventory_4_0ConnectionString { get { return (System.Configuration.ConfigurationManager.ConnectionStrings["Enventory_4_0ConnectionString"].ConnectionString); } }