Solução: Entity Framework 5 + Class Library + Erro de string de conexão

entityframeworkOlá pessoal, tudo bom?

Para quem vinha trabalhando com o Entity Framewok 4 e passou a utilizar a versão 5, deve ter notado algumas diferenças entre elas. A maioria das diferenças que encontrei foram positivas, mas certa vez me deparei com uma situação que infelizmente tive que considerar como negativa.

A situação ocorre quando criamos o modelo conceitual em um projeto do tipo Class Library e depois tentamos utiliza-lo em outros projetos do tipo ASP.NET, Windows Form, etc. O problema a que me refiro neste post é em relação à seguinte mensagem de erro:

No connection string named ‘xxxx’ could be found in the application config file.

No meu ponto de vista, o problema está relacionado à impossibilidade, de na versão 5, podermos passar a string de conexão como parâmetro no momento da criação do contexto. Veja abaixo:

Na versão 4, fazíamos assim:


public partial class Curso
{
  public int Adicionar()
  {
    using (AcademicoEntities contexto = new AcademicoEntities(Util.StringConexao))
    {
      try
      {
        contexto.Curso.Add(this);
        return contexto.SaveChanges();
      }
      catch
      {
        return -1;
      }
    }
  }
}

Repare que na versão 4 há a possibilidade de passar a string de conexão por parâmetro no momento da instância do contexto do EF, coisa que na versão 5, curiosamente, foi retirada.

Bem, para voltarmos a ter essa característica na versão 5 do EF, basta que façamos o seguinte:

Supondo que seu modelo conceitual chame-se AcademicoEntities, crie uma classe parcial para esse modelo de tal forma que a mesma fique conforme exemplificado no trecho de código a seguir:

O pulo do gato 😉


//Nome do arquivo: _AcademicoEntities.cs

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EF_ClassLibrary
{
  public partial class AcademicoEntities : DbContext
  {
    public AcademicoEntities(string ConnectionString) : base(ConnectionString) { }
  }
}

Repare que o objetivo da classe é voltar a característica de enviar por parâmetro a string de conexão que desejamos manter associada ao nosso contexto, ou seja, a partir de agora podemos voltar utilizar a declaração do contexto conforme fazíamos no EF4.

Bem, espero ter ajudado!

Grande abraço,
Eduardo Henrique Rizo

[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]

Deixe um comentário