我是Entity Framework的新手。我继承了一个使用Entity Framework 6的网站。该网站有两个连接字符串来访问数据库服务器。第一个进入共享数据库并确定要打开哪个公司数据库以获取特定数据。该网站托管在带有IIS 8.5的Windows Server 2012上。该数据库位于带有SQL Server 2008 R2的Windows Server 2012上。
我的连接字符串如下所示:
<add name="AuthEntities"
connectionString="metadata=res://*/Auth.csdl|res://*/Auth.ssdl|res://*/Auth.msl;provider=System.Data.SqlClient;provider connection string="data source=SQLDB;initial catalog=SharedDB;persist security info=True;user id=##;password=#####;MultipleActiveResultSets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
<add name="AssetEntities"
connectionString="metadata=res://*/Asset.csdl|res://*/Asset.ssdl|res://*/Asset.msl;provider=System.Data.SqlClient;provider connection string="data source=[SERVER];initial catalog=[DB];user id=##;password=#####;MultipleActiveResultSets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
当网站在Web服务器上运行时,第一个连接字符串(AuthEntities
)连接到SQL Server并正确提取共享数据(我可以在发生错误后在网页上看到shareddb数据)。然后,它会调用GetConnectionString
来获取AssetEntities
的公司数据库。 MasterData
是一个包含.edmx
文件和此连接字符串查找的DLL。它在网站上被引用。
执行满足查询时,我收到错误
EntityException:底层提供程序在Open上失败。
代码:
using (AssetEntities context = new AssetEntities(MasterData.ConnectionString.GetConnectionString(companyid)))
{
var meets = from m in context.Meetings
join l in context.MeetingLocations on m.MeetingLocationId equals l.MeetingLocationId into outerLocation
from l in outerLocation.DefaultIfEmpty()
where m.IsDeleted == false
orderby m.MeetingDate.Year descending, m.MeetingDate descending
select new { m, l };
foreach (var meet in meets)
{
//map the values to a new object
}
MasterData.ConnectionString.GetConnectionString(companyid)
:
AuthEntities authEntity = new AuthEntities();
Company company = (from c in authEntity.Companies
where c.CompanyId == CompanyId
select c).FirstOrDefault<Company>();
str = (company == null ? "" : ConfigurationManager.ConnectionStrings["AssetEntities"].ConnectionString.Replace("[SERVER]", company.Asset_Server).Replace("[DB]", company.Asset_Database));
此问题仅发生在我们的生产环境中。 QA环境在Web服务器上有SQL Server,这似乎不是问题所在。
我花了很多天时间试图找到正确的关键字来搜索此问题并阅读许多试图找到解决方案的文章。我完全失去了。
任何有关解决此问题的帮助将不胜感激。谢谢!
答案 0 :(得分:0)
尝试在连接字符串中使用其IP地址或fqdn(smoeserver.somedomain.com而不是someserver)访问服务器。这在类似的情况下对我们有用。