WPF应用程序:实体框架连接第一次失败

时间:2014-10-07 01:57:38

标签: c# wpf entity-framework

我一直在WPF数据库转换应用中使用Entity Framework。我接近发布应用程序,但有一件事总是让我感到烦恼 - 数据库上下文在我第一次尝试时总是失败。

这是我得到的错误:

  

System.Data.SqlClient.SqlException(0x80131904):建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供者:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)

我知道实例是可访问的,因为我正在运行其他东西(并且它在所有后续尝试中连接都很好)。所以它必须在我的配置中。

我有一个应用程序的默认app.config(如果不存在)。使用该应用程序,用户连接到他们的数据库实例,并使用ConfigurationManager类将其设置保存到配置文件。在保存连接字符串之前,我不进行任何上下文调用。

示例app.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
     <add key="ImportUser" value="Admin" />
  </appSettings>
   <connectionStrings>
     <add name="RockContext" connectionString="Data Source=localhost;
          Initial Catalog=RockChMS;Integrated Security=True;
          MultipleActiveResultSets=True;Connection Timeout=15"
          providerName="System.Data.SqlClient" />
   </connectionStrings>
</configuration>

EF将连接:

  • 使用正确的app.config设置重启应用程序
  • 如果我在程序启动前手动更改app.config

有没有办法在程序启动后强制EF使用正确的连接字符串重新加载/刷新?在保存修改后的连接字符串之前,我不会使用上下文调用任何内容。< / p>

2 个答案:

答案 0 :(得分:1)

无法强制EF重新加载配置。但是如果你有正确的连接字符串 您可以使用ObjectContext构造函数的重载版本,该构造函数将连接字符串作为参数。例如,如果BuroDBEntities - 我的对象上下文类(公共部分类BuroDBEntities:ObjectContext {...}):

private BuroDBEntities Context = new BuroDBEntities(); //will use connection string from app configuration file

private BuroDBEntities Context = new BuroDBEntities(MyConnectionString); //will use connection string from parameter

答案 1 :(得分:0)

在我的db对象类中添加构造函数后,我意识到在刷新配置时我没有检查正确的部分。 ConfigurationManager.RefreshSection方法区分大小写,如果不匹配则不会抛出错误。

现在我可以在访问DBContext之前保存配置并刷新它:

appConfig.Save( ConfigurationSaveMode.Modified );
ConfigurationManager.RefreshSection( "connectionStrings" );