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

Banco não aparece após Update-Database

Boa tarde,

Executei o comando "Update-Database" e não ocorreu nenhum erro. Porém o banco não apareceu no "SQL Server Object Explorer".

Tentei executar o comando "Update-Database" novamente, e a mensagem abaixo é exibida:

PM> Update-Database Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]

User profile is available. Using 'C:\Users\User\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.

Microsoft.EntityFrameworkCore.Infrastructure[10403]

Entity Framework Core 2.0.2-rtm-10011 initialized 'Contexto' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None

Microsoft.EntityFrameworkCore.Database.Command[20101]

Executed DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30']

SELECT OBJECT_ID(N'__EFMigrationsHistory');

Microsoft.EntityFrameworkCore.Database.Command[20101]

Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']

SELECT OBJECT_ID(N'__EFMigrationsHistory');

Microsoft.EntityFrameworkCore.Database.Command[20101]

Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']

SELECT [MigrationId], [ProductVersion]

FROM [__EFMigrationsHistory]

ORDER BY [MigrationId];

Microsoft.EntityFrameworkCore.Migrations[20405]

No migrations were applied. The database is already up to date.

No migrations were applied. The database is already up to date. Done.

PM>

Também procurei no "Microsoft SQL Server Management Studio" e o banco não aparece.

6 respostas

Deividh, vamos lá... Pra executar uma atualização/criação do bando através do Migrations vc precisa ter feito esses passos, já:

  • Enable-Migrations
  • Add-Migration [Inicial]
  • Conferir a classe de Migrations gerada no projeto com o nome [Inicial]
  • Update-Database
Se nada deu certo pode ser que você criou as chaves primárias de forma incorreta em seus modelos. Uma coisa que pode ser feita também é deletar a pasta packages do projeto e executar "Update-Package" pelo PM que o VS cria a pasta de novo atualizando os pacotes. Tente do início.

Espero ter ajudado de alguma forma. Se resolveu seu problema marque como solução, por favor. Abs

Boa noite, quanto utilizei o comando "Enable-Migrations" ocorreu a seguinte mensagem

PM> Enable-Migrations

Enable-Migrations is obsolete. Use Add-Migration to start using Migrations.

PM>

Segue abaixo a classe Migrations que foi gerada com o comando "Add-Migration"

using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using System;
using System.Collections.Generic;

namespace CasaDoCodigo.Migrations
{
    public partial class Inicial : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.CreateTable(
                name: "Produtos",
                columns: table => new
                {
                    Id = table.Column<int>(nullable: false)
                        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                    Nome = table.Column<string>(nullable: true),
                    Preco = table.Column<decimal>(nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_Produtos", x => x.Id);
                });

            migrationBuilder.CreateTable(
                name: "ItensPedido",
                columns: table => new
                {
                    Id = table.Column<int>(nullable: false)
                        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                    PrecoUnitario = table.Column<decimal>(nullable: false),
                    ProdutoId = table.Column<int>(nullable: true),
                    Quantidade = table.Column<int>(nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_ItensPedido", x => x.Id);
                    table.ForeignKey(
                        name: "FK_ItensPedido_Produtos_ProdutoId",
                        column: x => x.ProdutoId,
                        principalTable: "Produtos",
                        principalColumn: "Id",
                        onDelete: ReferentialAction.Restrict);
                });

            migrationBuilder.CreateIndex(
                name: "IX_ItensPedido_ProdutoId",
                table: "ItensPedido",
                column: "ProdutoId");
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropTable(
                name: "ItensPedido");

            migrationBuilder.DropTable(
                name: "Produtos");
        }
    }
}

Sobre o comando "Update-Package", não encontrei a pasta "packages" para deletar. Mas executei o comando e a seguinte mensagem foi exibida:

PM> Update-Package

Restaurando pacotes para C:\Users\User\Desktop\CasaDoCodigo\CasaDoCodigo\CasaDoCodigo.csproj...

GET https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.all/index.json

OK https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.all/index.json 564ms

GET https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.all/2.0.7/microsoft.aspnetcore.all.2.0.7.nupkg

OK https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.all/2.0.7/microsoft.aspnetcore.all.2.0.7.nupkg 629ms

Instalando Microsoft.AspNetCore.All 2.0.7.

Instalando o pacote Microsoft.AspNetCore.All 2.0.7 do NuGet.

Confirmando restauração...

Gerando arquivo do MSBuild C:\Users\User\Desktop\CasaDoCodigo\CasaDoCodigo\obj\CasaDoCodigo.csproj.nuget.g.targets.

Gravando arquivo de bloqueio no disco. Caminho: C:\Users\User\Desktop\CasaDoCodigo\CasaDoCodigo\obj\project.assets.json

Restauração concluída em 13,81 sec para C:\Users\User\Desktop\CasaDoCodigo\CasaDoCodigo\CasaDoCodigo.csproj.

'Microsoft.AspNetCore.All 2.0.6' desinstalado com sucesso de CasaDoCodigo

'Microsoft.AspNetCore.All 2.0.7' instalado com sucesso em CasaDoCodigo

Executar ações do nuget levou 2,09 sec

Tempo Decorrido: 00:00:19.2896721

PM>

Você criou essas duas propriedades do tipo DbSet na classe herdada de DbContext ? Se sim, falta só executar o Update-Database.

Caso o banco ainda não apareça depois do sucesso, só pode ser suas permissões de banco, ou a string de conexão aponta pra um banco e vc tá tentando abrir outro local pra conferir...

Segue abaixo o código do Contexto, as propriedades DbSet foram criadas:

namespace CasaDoCodigo
{
    public class Contexto : DbContext
    {
        public DbSet<Produto> Produtos { get; set; }
        public DbSet<ItemPedido> ItensPedido { get; set; }

        public Contexto(DbContextOptions<Contexto> options) : base(options)
        {

        }
    }
}

Segue abaixo a String de Conexão:

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            string connectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=master;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
            services.AddDbContext<Contexto>(options => options.UseSqlServer(connectionString));
        }

Utilizando o Comando "Update-Database" a seguinte mensagem é exibida:

PM> update-database
Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
      User profile is available. Using 'C:\Users\User\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
Microsoft.EntityFrameworkCore.Infrastructure[10403]
      Entity Framework Core 2.0.2-rtm-10011 initialized 'Contexto' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None
Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT OBJECT_ID(N'__EFMigrationsHistory');
Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT OBJECT_ID(N'__EFMigrationsHistory');
Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT [MigrationId], [ProductVersion]
      FROM [__EFMigrationsHistory]
      ORDER BY [MigrationId];
Microsoft.EntityFrameworkCore.Migrations[20405]
      No migrations were applied. The database is already up to date.
No migrations were applied. The database is already up to date.
Done.
PM>

Também executei o Visual Studio como administrador para verificar se não era algum tipo de permissão, mas deu na mesma.

solução!

Deividh, busquei um artigo sobre criação de banco na internet e nele vi todos os passos, menos a criação do banco:

Como eu sempre crio o banco de desenvolvimento na mão por N motivos não me importei. E em produção é a área de suporte quem cria. Só que na sua string de conexão está a tabela master do SQL... Deixe-a de lado e crie um banco seu manualmente e depois mude a string. Realmente essa tabela master tem permissões diferentes e pode talvez estar gerando esse erro. As tabelas devem estar dentro dela mas vc não tem permissão para vê-las.

Abs

Agora deu certo, muito obrigado.

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