我的网站使用 LINQ to SQL 来访问两个数据库。第一个数据库是网站(我将其称为 WEBSITE)数据,第二个数据库是交易历史记录(我将其称为 WEBSITE_HISOTRY)。不久前,当我将 WEBSITE_HISOTRY 中的表添加到我的数据上下文时,我收到了某种警报,我单击了“确定”(可能不是最好的主意)。我确实记得 Visual Studio 抱怨数据库的连接与我的配置或类似的内容不同。一切工作正常,直到我发布到我的服务器。我不断收到数据库未找到错误,当我记录连接字符串时,我发现了这一点。
网站_历史记录
数据源=MYCOMPUTER\SQLEXPRESS;初始目录=WebSiteHistory;集成安全性=TRUE
网站
数据来源=my.dyndns.net;网络库=DBMSSOCN;初始目录=网站;用户ID=网站用户;密码=********;
我还发现 WEBSITE_HISTORY 数据上下文的构造函数需要连接字符串(与具有无参数构造函数的 WEBSITE 不同)。我更改了构造函数,但每次将表添加到数据上下文时,它都会变回来。我读过另一个关于将 DataContext 连接属性设置为 Application = true 的问题。我已经尝试过此操作,但无法将“设置属性名称”设置为正确的连接。
我不确定我做了什么煽动了这种行为。任何帮助将不胜感激。
数据上下文应该有多个可用的重载构造函数;其中之一要求提供连接字符串。我建议一直使用这个;原因是这允许您更改为指向具有相同结构的新数据库,并且它将以这种方式工作。我倾向于创建一个静态类来创建我的数据上下文类,以使这更容易:
public static class ContextCreator
{
public static CustomDataContext Create()
{
return new CustomDataContext(ConfigurationManager.ConnectionStrings["CName"].ConnectionString);
}
}
我放弃了,不再和设计师抗争了。我现在按照 Brian 的建议传递连接字符串(即 DataAccess.Properties.Settings.Default.WEBSITEHISTORY_ConnectionString)并且它有效。当我检查属性文件时,我发现 WEBSITE_HISTORY 属性缺少这个
[global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
我还没有研究过它,但我打赌这会导致它使用我的 DataAccess 属性中的默认连接,而不是 Web 配置。
根据布莱恩的评论,我认为他所描述的场景就是导致这种情况的原因。
感谢大家的帮助!
你所做的事情是行不通的。数据库上下文是到单个数据库的连接。您不应尝试将其他数据库中的表添加到特定上下文。事实上,这可能根本行不通。如果您发现自己正在处理多个数据库,则将需要有多个数据库上下文对象,每个数据库一个。