none
Entity Framework + Postgresql: key=value argument incorrect in ConnectionString EXCEPTION RRS feed

  • Pergunta

  • Pessoal,

    Estou tentando configurar o postgresql 9.2 com o entity framework e não estou conseguindo. Está me dando o seguinte erro quando tento recuperar os dados de uma tabela pelo dbContext:

    System.ArgumentException was unhandled by user code
      HResult=-2147024809
      Message=key=value argument incorrect in ConnectionString
    Nome do parâmetro: persist security info
      Source=Npgsql
      ParamName=persist security info
      StackTrace:
           em Npgsql.NpgsqlConnectionStringBuilder.GetKey(String key) na C:\projects\Npgsql2\src\Npgsql\NpgsqlConnectionStringBuilder.cs:linha 723
           em Npgsql.NpgsqlConnectionStringBuilder.set_Item(String keyword, Object value) na C:\projects\Npgsql2\src\Npgsql\NpgsqlConnectionStringBuilder.cs:linha 800
           em System.Data.Common.DbConnectionStringBuilder.set_ConnectionString(String value)
      InnerException: 


    Estou seguindo este tutorial: http://www.devart.com/dotconnect/postgresql/articles/tutorial_ef.html

    Segui todos os passos intalei tudo que pediu porém deu este erro.

    A minha string de conexão:

    <connectionStrings>
        <add name="ChinookContext" 
             connectionString="Server=127.0.0.1;Port=5432;User Id=postgres;Host=localhost;Database=Chinook;Initial Schema=public;User Id=postgres;Password=super" 
             providerName="Npgsql" />
      </connectionStrings>

    Ta fod**

    Se puderem me ajudar.... ficarei muuuuito grato, porcurei este err na internet mas naão tive muito resultado =(((((

    domingo, 22 de setembro de 2013 19:22

Respostas

Todas as Respostas

  • O tutorial que vc esta seguindo é para o DotConnect que é um componente pago.

    Sua configuraçao esta usando o npgsql (que é gratuito).

    O que ocorre é que o npgsql nao tem a propriedade Initial Schem, e por isso eu acho que vc deve estar recebendo um erro:

    http://www.connectionstrings.com/postgresql/

    Siga este outro tutorial:

    http://fxjr.blogspot.ca/2013/06/npgsql-code-first-entity-framework-431.html

    Este tutotial foi escrito pelo Francisco Figueiredo, que é o autor/criador do npgsql.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    segunda-feira, 23 de setembro de 2013 20:21
  • Opa, obrigado por responder

    Tinha muita esperança de ser isso mesmo mas não deu certo. Continuava acusando que o schema "dbo" não existia, mesmo eu colocando as annotations indicando o Schema.

    Cheguei até a definir o schema via a fluent API que fica no Context. Mas deu no mesmo.

    Achei essa thread aqui no stack overflow (http://stackoverflow.com/questions/16217794/npgsql-schema-dbo-does-not-exist) e consegui ao definir o trexo:

            public SwsContext()
                : base("sws")
            {
    
            }

    Ele não deu erro mais do schema, mas também não retornou meus dados...

    mas acho que agora ta andando :D

    Ele retorna que a minha tabela de estabelecimento está com o count 0

            public string Index()
            {
                string testess = "";
                using (SwsContext db = new SwsContext())
                {
                    var estabelecimentos = db.Estabelecimento.ToList<Estabelecimento>();
                                          
                    foreach (var est in estabelecimentos)
                    {
    
                        testess += est.NomeFantasia + " ";
                    }
    
                }
    
                return testess;
            }

    segunda-feira, 30 de setembro de 2013 18:17
  • Agora o que está acontecendo é que mesmo usando o provider do Postgresql ele ta usando o Sqlclient de algum jeito que não sei explicar, por que ele criou o banco de dados no SqlServer...

    ¬¬

    Banco de dados sendo criado no SQL Server ao invés de referenciar o já existente no POSTGRESQL

    Banco de dados sendo criado no SQL Server ao invés de referenciar o já existente no POSTGRESQL

    Ou seja, o erro continua
    terça-feira, 1 de outubro de 2013 18:18
  • Olá,

    Vc chegou a settar o TYPE de sua connection string?

    Veja esse post: http://brice-lambson.blogspot.com.br/2012/10/entity-framework-on-postgresql.html

    O sujeito usar o atributo TYPE na connection string, indicando uma classe factory.

    []s!


    MSc. Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Visual C#
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    quinta-feira, 24 de outubro de 2013 11:09
    Moderador
  • Como eu disse (e o Fernando confirmou), vc nao esta configurando o entity corretamente.

    Verifique se sua configuraçao esta deste jeito:

    <system.data>
      <DbProviderFactories>
        <add name="Npgsql Data Provider"
              invariant="Npgsql"
              description="Data Provider for PostgreSQL"
              type="Npgsql.NpgsqlFactory, Npgsql" />
      </DbProviderFactories>
    </system.data>

    O type é fundamental.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    quinta-feira, 24 de outubro de 2013 11:17
  • Mas já está definido.

    Modifiquei o nome da string de conexão para o nome do contexto e o erro foi diferente, agora diz

    "The context cannot be used while the model is being created."

    Segue o meu We.config

    <?xml version="1.0" encoding="utf-8"?>
    <!--
      For more information on how to configure your ASP.NET application, please visit
      http://go.microsoft.com/fwlink/?LinkId=152368
      -->
    <configuration>
      <configSections>
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
      </configSections>
      <connectionStrings>
        <add name="SwsContext" 
             connectionString="Host=127.0.0.1;Database=sws;User Id=postgres;Password=super" 
             providerName="Npgsql" />
      </connectionStrings>
      <appSettings>
        <add key="webpages:Version" value="2.0.0.0" />
        <add key="webpages:Enabled" value="false" />
        <add key="PreserveLoginUrl" value="true" />
        <add key="ClientValidationEnabled" value="true" />
        <add key="UnobtrusiveJavaScriptEnabled" value="true" />
      </appSettings>
      <system.web>
        <httpRuntime />
        <compilation debug="true" targetFramework="4.0" />
        <authentication mode="Forms">
          <forms loginUrl="~/Account/Login" timeout="2880" />
        </authentication>
        <pages controlRenderingCompatibilityVersion="4.0">
          <namespaces>
            <add namespace="System.Web.Helpers" />
            <add namespace="System.Web.Mvc" />
            <add namespace="System.Web.Mvc.Ajax" />
            <add namespace="System.Web.Mvc.Html" />
            <add namespace="System.Web.Optimization" />
            <add namespace="System.Web.Routing" />
            <add namespace="System.Web.WebPages" />
          </namespaces>
        </pages>
        <profile defaultProvider="DefaultProfileProvider">
          <providers>
            <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
          </providers>
        </profile>
        <membership defaultProvider="DefaultMembershipProvider">
          <providers>
            <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
          </providers>
        </membership>
        <roleManager defaultProvider="DefaultRoleProvider">
          <providers>
            <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
          </providers>
        </roleManager>
        <!--
                If you are deploying to a cloud environment that has multiple web server instances,
                you should change session state mode from "InProc" to "Custom". In addition,
                change the connection string named "DefaultConnection" to connect to an instance
                of SQL Server (including SQL Azure and SQL  Compact) instead of to SQL Server Express.
          -->
        <sessionState mode="InProc" customProvider="DefaultSessionProvider">
          <providers>
            <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
          </providers>
        </sessionState>
      </system.web>
      <system.webServer>
        <validation validateIntegratedModeConfiguration="false" />
        <handlers>
          <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
          <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
          <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
          <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
          <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
          <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
        </handlers>
      </system.webServer>
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" />
            <bindingRedirect oldVersion="0.0.0.0-4.3.1.0" newVersion="4.3.1.0" />
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
      <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
      </entityFramework>
      <system.data>
        <DbProviderFactories>
          <add name="Npgsql Data Provider" 
               invariant="Npgsql" 
               description="Data Provider for PostgreSQL" 
               type="Npgsql.NpgsqlFactory, Npgsql" />
        </DbProviderFactories>
      </system.data>
    </configuration>

    quinta-feira, 24 de outubro de 2013 14:42
  • Kelvin, 

    A dll Npgsql está na pasta bin junto com as demais?

    []s!


    MSc. Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Visual C#
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    sábado, 26 de outubro de 2013 21:48
    Moderador
  • Está sim Fernando. Dentro da pasta bin junto com Npgsql.pdb e Npgsql.cs

    domingo, 27 de outubro de 2013 12:35
  • Kelvin. Você conseguiu setar o Npgsql com Entity Framework ? 
    sexta-feira, 13 de fevereiro de 2015 09:24
  • Olá Carlos.

    Não cara. Na época acabei usando uma connection na mão mesmo ao invés do entity. Era um trabalho da faculdade e queria fazer isso funcionar, o prazo foi apertando e tive que improvisar. Depois vou até tentar fazer esta conexão novamente.

    quarta-feira, 25 de março de 2015 11:43
  • Na epoca eu creio que este pacote nao existia, mas veja isso:

    https://www.nuget.org/packages/Npgsql.EntityFramework/

    Se voce for ver o codigo teste:

    https://github.com/npgsql/npgsql/tree/master/test/Npgsql.EntityFramework.Tests

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    quarta-feira, 25 de março de 2015 12:59
  • No gerenciador de pacotes NuGet digite postgres no campo pesquisa, aparecerá uma opção entity framework 5.0 for postgresql, selecione install.

    Espero ter ajudado.


    Atenciosamente, Marcio Nogueira Cardoso Pinto.

    quarta-feira, 25 de março de 2015 14:57
  • Obrigado pelas dicas senhores. Provavelmente hoje seria muito mais facil mesmo integrar as duas tecnologias.

    Sobre o Nuget, é este Marcio???

    quarta-feira, 25 de março de 2015 16:55
  • Sim, é esse.

    Para corrigir o problema que você relatou anteriormente: faça o imports do NPGSQL:

    imports NpgSql (Visual Basic)

    using NpgSql();(C#)


    Atenciosamente, Marcio Nogueira Cardoso Pinto.

    quarta-feira, 25 de março de 2015 17:58