none
Erro ao mudar a connection string no entity RRS feed

  • Pergunta

  • Quando crio um modelo e seto uma conexão pelo wizard, tudo funciona 100%.

    porem se eu mudar a string conncetion da erro.

    string conStringA = string.Format("metadata=res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl;provider=Oracle.DataAccess.Client;provider connection string=\"DATA SOURCE={1};PASSWORD={2};USER ID={3}\"", "ModelTeste", "server1/orcl", "ABC", "123");

    string conStringB = string.Format("metadata=res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl;provider=Oracle.DataAccess.Client;provider connection string=\"DATA SOURCE={1};PASSWORD={2};USER ID={3}\"", "ModelTeste", "server2/orcl", "ABC", "123");

     Type contextType = typeof(EntitiesTeste);
     object objContext = Activator.CreateInstance(contextType, conStringB);

     using (EntitiesTeste ContextoPaciente = new EntitiesTeste(connStrBuild.ToString()))
                {
                    List<PACIENTE> Pacientes_lista = new List<PACIENTE>();
                    ObjectQuery<PACIENTE> Pacientes_consulta = ContextoPaciente.PACIENTE;

                    var query = from pacientes in Pacientes_consulta
                                //where pacientes.RESOURCECOD == 1
                                select new { pacientes };
                }

    Enquanto eu estiver usando a conStringA que é exatamente igual a que foi gerada pelo wizardi tudo funciona. Porem quando altero para conStringB

    Acontece o erro. Nos dois servidodes tem exatamente o mesma base de dados e estou utilizando Oracle.

    desde já agradeço


    quarta-feira, 7 de março de 2012 15:04

Respostas

  • Olá Fernando!

    Já tinha lido e tentando isso porem não funcionou, depois de tanto ler, de tanto procurar soluções comecei a testar algumas coisas de metido e sem querer acabei descobrindo no arquivo .edmx uma propriedade Schema

    <EntityContainer Name="Model1StoreContainer">
              <EntitySet Name="tabela" EntityType="Model1.Store.tabela" store:Type="Tables" Schema="SERVER1" />

    Ao remover esta propriedade do arquivo funciona a mudança de connection String;

    Infelizmente não tenho nenhuma referencia para linkar.

    Muito obrigado pela atenção


    • Marcado como Resposta Edson Fiorese quarta-feira, 7 de março de 2012 19:16
    quarta-feira, 7 de março de 2012 19:16

Todas as Respostas

  • Olá Edson,

    as duas connections strings me parecem iguais.

    Onde esta a diferença entre as duas?

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    quarta-feira, 7 de março de 2012 16:24
    Moderador
  • Olá! desculpa a diferença é apena dos servidores corrigi na pergunta

    obrigado

    quarta-feira, 7 de março de 2012 17:02
  • Olá Edson,

    Qual a mensagem de erro que é disparada quando vc tenta conectar

    ?

    Vc pode mudar sua connection string utilizando um SqlConnectionStringBuilder, acho que é mais fácil e garantido (segue exemplo)

                SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
    
                sqlBuilder.DataSource = @"Server1\MySERVER";
    
                sqlBuilder.InitialCatalog = "MyNewDatabase";
    
                sqlBuilder.IntegratedSecurity = true;
    
                sqlBuilder.MultipleActiveResultSets = true;
    
               
    
                EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
    
                entityBuilder.Provider = "System.Data.SqlClient";
    
                entityBuilder.ProviderConnectionString = sqlBuilder.ToString();
    
                entityBuilder.Metadata = @"res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl";
    
     
    
                EntityConnection conn = new EntityConnection(entityBuilder.ToString());
    
     
    
                MyNewDatabaseEntities context = new MyNewDatabaseEntities(conn);
    

    Ou, vc pode ter duas strings de conexão no seu arquivo de configuração e mudar o alias quando vc criar seu datacontext.

    []s!

    Referências:

    http://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/8a89a728-6c8d-4734-98cb-11b196ba11fd

    http://stackoverflow.com/questions/1493554/change-db-name-in-connection-string-at-runtime-in-entity-framework


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    quarta-feira, 7 de março de 2012 18:01
    Moderador
  • Olá Fernando!

    Já tinha lido e tentando isso porem não funcionou, depois de tanto ler, de tanto procurar soluções comecei a testar algumas coisas de metido e sem querer acabei descobrindo no arquivo .edmx uma propriedade Schema

    <EntityContainer Name="Model1StoreContainer">
              <EntitySet Name="tabela" EntityType="Model1.Store.tabela" store:Type="Tables" Schema="SERVER1" />

    Ao remover esta propriedade do arquivo funciona a mudança de connection String;

    Infelizmente não tenho nenhuma referencia para linkar.

    Muito obrigado pela atenção


    • Marcado como Resposta Edson Fiorese quarta-feira, 7 de março de 2012 19:16
    quarta-feira, 7 de março de 2012 19:16
  • Entendi,

    Seu modelo estava apontando para o Schema.

    Bele! :)

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    quarta-feira, 7 de março de 2012 19:20
    Moderador