7
respostas

Erro ao criar migrações no Entity Framework

Estou há uns dias tentando criar migrações, mas não acho uma solução de jeito nenhum. Olhei nos outros posts, no site da microsoft e etc.. Fiz as duas aulas duas vezes, conferi tudo e refiz o programa. As versões do EntityFramework.MicrosoftSqlServer 7.0 e Commands 7.0 também. Aparentemente é algum erro no contexto... Segue o erro:

PM> Enable-Migrations
No context type was found in the assembly 'lojaEntity'.
PM> Add-Migration criaUsuario
No migrations configuration type was found in the assembly 'lojaEntity'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration).

EntidadesContext.cs:

using lojaEntity.Entidades;
using Microsoft.Data.Entity;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace lojaEntity
{
    public class EntidadesContext : DbContext
    {
        public DbSet<Usuario> Usuarios { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            string stringConexao = ConfigurationManager.ConnectionStrings["lojaDesuConnectionString"].ConnectionString;
            optionsBuilder.UseSqlServer(stringConexao);
            base.OnConfiguring(optionsBuilder);
        }
    }
}

O Usuario.cs na pasta Entidades e o Program.cs foram devidamente implementados...

7 respostas

Olá Layla,

No EntidadesContext, o ConfigurationManager está tentando se conectar com um banco cuja connection string está com o nome "lojaDesuConnectionString". No seu App.config, você criou a sua string de conexão exatamente com este nome?

Se não for isso, me manda o código do seu App.config, Usuario e Program para eu dar uma olhada. As vezes acontece de passar uma coisa que a gente não percebeu na hora de escrever o código.

Uhum... Cheguei a conferir isso também.. Enfim, segue os códigos. App.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="lojaDesuConnectionString" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=&quot;C:\Users\adelar\Documents\Visual Studio 2015\Projects\lojaEntity\lojaDesu.mdf&quot;;Integrated Security=True;Connect Timeout=30" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

Usuario.cs :

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

namespace lojaEntity.Entidades
{
    public class Usuario
    {
        public int ID { get; set; }
        public string Nome { get; set; }
        public string Senha { get; set; }
    }
}

Program.cs:

using lojaEntity.Entidades;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace lojaEntity
{
    class Program
    {
        static void Main(string[] args)
        {
            EntidadesContext contexto = new EntidadesContext();
            Usuario adel = new Usuario()
            {
                Nome = "adel",
                Senha = "123"
            };
            contexto.Usuarios.Add(adel);
            contexto.SaveChanges();
            contexto.Dispose();
        }
    }
}

Olá Layla,

seu código parece correto. O estranho é que se você está usando o Entity Framework 7, quando você executasse o comando Enable-Migrations ele deveria acusar que este comando já está obsoleto nesta versão.

Você tem mais de um projeto criado no seu Visual Studio? Tenho a impressão que ele não instalou o Entity ou as migrations no seu projeto da loja. Verifica se no console Nuget, tem um combo box chamado Default Project e o projeto escolhido é o lojaEntity. Ai rode os dois comandos:

Install-Package EntityFramework.MicrosoftSqlServer -Pre
Install-Package EntityFramework.Commands -Version 7.0.0-rc1-final -pre

E verifique se ele mostrará a mensagem de Successfully instaled. Se quiser tentar reinstalar os frameworks, você pode dar o comando Uninstall-Package <qual o package quer remover> do Nuget.

Estranhamente, no primeiro deu erro..

PM> Install-Package EntityFramework.MicrosoftSqlServer -Pre
Install-Package : Unable to find package 'EntityFramework.MicrosoftSqlServer'
At line:1 char:16
+ Install-Package <<<<  EntityFramework.MicrosoftSqlServer -Pre
    + CategoryInfo          : NotSpecified: (:) [Install-Package], Exception
    + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand

PM> Install-Package EntityFramework.Commands -Version 7.0.0-rc1-final -pre
Package 'EntityFramework.Commands.7.0.0-rc1-final' already exists in project 'lojaEntity'

Veja se rodando este comando ele consegue instalar

Install-Package EntityFramework.MicrosoftSqlServer -Version 7.0.0-rc1-final -Pre

Nesse caso, ele diz que já ta instalado..

PM> Install-Package EntityFramework.MicrosoftSqlServer -Version 7.0.0-rc1-final -Pre
Package 'EntityFramework.MicrosoftSqlServer.7.0.0-rc1-final' already exists in project 'lojaEntity'

Estranho, porque no anterior ele não encontrou o pacote para instalar. Veja se dando fazendo estes comandos no console funciona:

Uninstall-Package EntityFramework.MicrosoftSqlServer -Version 7.0.0-rc1-final -Pre
Uninstall-Package EntityFramework.Commands -Version 7.0.0-rc1-final -pre
Install-Package EntityFramework.MicrosoftSqlServer -Version 7.0.0-rc1-final -Pre
Install-Package EntityFramework.Commands -Version 7.0.0-rc1-final -pre