Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

EFCORE EM CAMADAS

Como faco resolver problema desses dois métodos abaixo em desenvolvimento em camadas. Tenho 2 projetos na mesma Solution. "prjEFCore" com meu contexto e o "prjView" que recebe a referencia do prjEFCore .

No "prjView" eu configuro o arquivo Startup para usar injeção de dependência tudo certinho. O problema que tenho que ficar comentando código abaixo para criar gerar as migrations necessárias no projeto "prjEFCore".Como resolvo isso ?

public AppContexto(DbContextOptions options) : base(options) {

    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        //var connectionString = Configuration.GetConnectionString("conexao");
        //string connectionString = "Server=(localdb)\\mssqllocaldb; Database=DbTeste; Trusted_Connection = true;";
        //optionsBuilder.UseSqlServer(connectionString);
    }
3 respostas

Oi, Wesley, tudo bem?

Deixa só eu entender: na hora de gerar as migrações você comenta a linha que define a string de conexão pelo arquivo de configuração (primeira linha). E na hora de rodar a aplicação você comenta a linha que define a string de conexão na mão (segunda linha). É isso?

Se for isso que descrevi acima, faça o seguinte: na classe Startup, que é onde vc injeta o contexto do EF Core, injete também a string de conexão. Mais ou menos desse jeito:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<AppContexto>(options => {
      options.UseSqlServer(Configuration.GetConnectionString("conexao"));
    });

    //outras configurações aqui...
}

E no método OnConfiguring()...

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    if (!optionsBuilder.IsConfigured)
    {
        string connectionString = "Server=(localdb)\\mssqllocaldb; Database=DbTeste; Trusted_Connection = true;";
        optionsBuilder.UseSqlServer(connectionString);
    }
}

A propriedade IsConfigured retorna true se a configuração já foi realizada anteriormente (no caso na hora de injetar a instância do contexto).

Testa aí e depois me dá um feedback se funcionou. Abraços e boas aulas!

solução!

Olá, Wesley

Se você não comenta esse código acima e tenta criar uma migração, acontece uma exceção? Se for, pode postar aqui a mensagem da exceção para darmos uma olhada, por favor?

Olá, Galera! Seguinte tiver que implementar esse método na minha classe Contexto

public class ApplicationContextDbFactory : IDesignTimeDbContextFactory { AppContexto IDesignTimeDbContextFactory.CreateDbContext(string[] args) { var configuration = new ConfigurationBuilder() .SetBasePath("C:/Users/waraujo/Source/repos/ModaNaWeb/ModaNaWebView/") .AddJsonFile("appsettings.json") .Build(); var builder = new DbContextOptionsBuilder(); var connectionString = configuration.GetConnectionString("conexao"); builder.UseSqlServer(connectionString); return new AppContexto(builder.Options); } }

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software