LINQ to SQL DataContext未更新ConnectionString

时间:2012-01-18 04:25:36

标签: c# sql database linq layer

我正在开发一个使用LINQ to SQL进行数据库访问的C#.NET应用程序。不幸的是,我花了4个多小时试图让应用程序在我的家庭网络上运行。我已经将应用程序带回家进行开发而没有问题,并将更改转移回工作。但是,今天晚上我继续遇到数据库访问问题,并注意到我的DAO中的连接字符串引用了我的工作ComputerName / Instance。我搜索了我的工作PC名称(即BEN-Laptop)的整个解决方案,我还使用Windows高级搜索选项来搜索我的整个目录。但是,我找不到任何对我工作PC的引用。当我将应用程序带回家工作时,我将所有连接字符串值从我的工作PC更改为我的家用电脑,我不明白为什么DAO中的连接字符串仍以某种方式引用我的工作PC和SQL实例。这些信息是否缓存在某处,因为我不知所措。

4 个答案:

答案 0 :(得分:2)

如果在设计视图中打开dbml文件并查看属性(F4),则应找到ConnectionString属性。当您展开可用连接字符串列表时,它应该告诉您每个字符串的来源。它很可能来自设置文件。 (〜\属性\ Settings.settings)

理想情况下,当您创建数据上下文时,您应该使用带有连接字符串的构造函数,您将确切地知道它来自何处。

using(var dc = new TestDataContext(connectionString))
{
    // Do stuff
}

答案 1 :(得分:1)

DataContext中我的数据库连接字符串的问题实际上是我的同事重新构建解决方案的结果。简而言之,Windows应用程序位于一个项目中,数据库逻辑在另一个项目中编译为DLL。 Windows应用程序是指旧版本的DLL,它显然具有我的连接字符串的工作设置。我只需要将项目中的引用更改为正确的DLL,一切正常。这也解释了为什么我在解决方案中找不到对我的工作PC的任何引用,因为我认为设置被编译到DLL文件中。尝试调试我的数据库DLL项目有助于实现这一发现。在我的基础DAO和Repository类中设置了几个断点并发现IDE绕过断点后,它促使我检查引用。

答案 2 :(得分:1)

首先:只提一下应该是这样的新连接字符串

string pp = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\AdventureWorks2012_Data.mdf;Integrated Security=True;Connect Timeout=30";

第二:

DataClasses1DataContext dc = new DataClasses1DataContext(pp);

第三:       对表类的实例进行更改

第四:

 dc.Persons.InsertOnSubmit(person);
        dc.SubmitChanges();

答案 3 :(得分:1)

您的DataContext()构造函数缺少告诉它实际数据库路径的字符串。