用于Windows服务的Npgsql EntityFramwork配置

时间:2016-05-15 10:47:50

标签: c# .net service entity-framework-6 npgsql

考虑安装EntityFramework 6.13和EntityFramework6的Npgsql 请考虑这些是用于Windows服务的packages.config和App.config。当尝试访问数据库时,我得到以下异常:

InnerException = {“系统找不到指定的文件”}

对数据库上下文的连接尝试引发异常“在建立与SQL Server的连接时发生了与网络相关或特定于实例的错误。未找到服务器或无法访问服务器。验证实例名称是否正确并且SQL Server配置为允许远程连接。(提供程序:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接“

packages.config:
    <?xml version="1.0" encoding="utf-8"?> <packages> <package id="EntityFramework" version="6.1.3" targetFramework="net45" /> <package id="EntityFramework6.Npgsql" version="3.0.7" targetFramework="net45" /> <package id="Npgsql" version="3.0.7" targetFramework="net45" /> </packages>

App.config中:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
      </configSections>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
      </startup>
      <entityFramework>
        <providers>
          <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
          <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql"></provider>
        </providers>
        <defaultConnectionFactory type="Npgsql.NpgsqlConnectionFactory, Npgsql.EntityFramework" />
      </entityFramework>
      <system.data>
        <DbProviderFactories>
          <remove invariant="Npgsql" />
          <add name="Npgsql Data Provider" invariant="Npgsql" support="FF" description=".Net Framework Data Provider for Postgresql" type="Npgsql.NpgsqlFactory, Npgsql" />
        </DbProviderFactories>
      </system.data>
      <connectionStrings>
        <add name="KutaisiDatabase" connectionString="Server=localhost;Database=KutaisiDatabase;User Id=postgres;Password=12345;" providerName="Npgsql" />
      </connectionStrings>
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="Npgsql" publicKeyToken="5d8b90d52f46fda7" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-3.0.7.0" newVersion="3.0.7.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>

对我来说,最古怪的事实是,相同的设置适用于Windows窗体应用程序(不是服务)。 这种行为可能是什么原因? 任何帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

答案是FOUND:引用的项目没有将application.exe.config复制到输出目录,因此服务将连接字符串视为SQL Server连接字符串,因此对于postgres数据库它不起作用。