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

本文关键字:连接 第一次 失败 框架 实体 应用程序 WPF | 更新日期: 2023-09-27 18:25:42

我一直在WPF数据库转换应用程序中使用实体框架。我即将发布这个应用程序,但有一件事一直困扰着我——DB上下文总是在我第一次尝试时失败

这是我得到的错误:

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重新加载/刷新正确的连接字符串在保存修改后的连接字符串之前,我不会使用上下文调用任何内容。

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

没有办法强制EF重新加载配置。但是如果你有正确的连接字符串您可以使用以连接字符串为参数的ObjectContext构造函数的重载版本。例如,如果BuroDBEntities-我的对象上下文类(公共分部类BuroDBEntitys: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

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

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

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