Entrei em um estado ruim com meu projeto ASP.Net MVC 5, usando o Code-First Entity Framework. Não me importo com a perda de dados, só quero poder começar de novo, recriar o banco de dados e começar a usar migrações Code-First.
Atualmente, estou em um estado em que todas as tentativas de atualizar o banco de dados resultam em uma exceção ou uma mensagem de erro. Além disso, o site não pode acessar o banco de dados corretamente. Como posso limpar todas as migrações, recriar o banco de dados e começar do zero sem precisar criar um novo projeto? Em outras palavras, quero manter meu código, mas largar o banco de dados.
Mais tarde, também desejarei sincronizar o banco de dados de implantação (SQL Server no Azure). Mais uma vez, não me importo de soltar todos os dados - só quero fazê-los funcionar.
Forneça todas as instruções para voltar a um estado limpo. Muito apreciado.
fonte
DROP DATABASE
então ....Respostas:
Siga as etapas abaixo:
1) Primeiro, vá para o Server Explorer no Visual Studio, verifique se as conexões de dados ".mdf" deste projeto estão conectadas; nesse caso, clique com o botão direito do mouse e exclua.
2) Vá para o Gerenciador de Soluções, clique no ícone Mostrar Todos os Arquivos.
3) Vá para App_Data, clique com o botão direito do mouse e exclua todos os arquivos ".mdf" deste projeto.
4) Exclua a pasta Migrations clicando com o botão direito e excluindo.
5) Vá para o SQL Server Management Studio, verifique se o banco de dados deste projeto não está lá, caso contrário, exclua-o.
6) Acesse o Package Manager Console no Visual Studio e digite:
Enable-Migrations -Force
Add-Migration init
Update-Database
7) Execute seu aplicativo
Nota: Na etapa 6, parte 3, se você receber o erro "Não é possível anexar o arquivo ...", é possível que você não tenha excluído os arquivos do banco de dados completamente no SQL Server.
fonte
Gostaria de acrescentar que a resposta de Lin está correta.
Se você excluir o MDF incorretamente, precisará corrigi-lo. Fixar as conexões parafusadas no projeto ao MDF. Resposta curta; recrie e exclua-o corretamente.
update-database -force
[Use força, se necessário]Feito, aproveite seu novo banco de dados
ATUALIZAÇÃO 11/12/14 - Uso isso o tempo todo quando faço uma alteração de db de interrupção. Achei que essa é uma ótima maneira de reverter suas migrações para o banco de dados original:
Execute a migração normal para voltar ao atual
Update-Database -TargetMigration:0 -force
[Isso destruirá todas as tabelas e todos os dados.]Update-Database -force
[use força se necessário]fonte
Isso funcionou para mim:
fonte
Embora essa questão tenha como premissa não se importar com os dados, às vezes a manutenção dos dados é essencial.
Em caso afirmativo, escrevi uma lista de etapas sobre como recuperar o pesadelo do Entity Framework quando o banco de dados já possui tabelas com o mesmo nome aqui: Como recuperar o pesadelo do Entity Framework - o banco de dados já possui tabelas com o mesmo nome
Aparentemente ... um moderador achou adequado excluir minha postagem, então colarei aqui:
Como recuperar do pesadelo do Entity Framework - o banco de dados já possui tabelas com o mesmo nome
Descrição : se você gosta de nós quando sua equipe é nova na EF, você terminará em um estado em que não poderá criar um novo banco de dados local ou não poderá aplicar atualizações ao banco de dados de produção. Você quer voltar para um ambiente EF limpo e seguir o básico, mas não pode. Se você trabalhar para produção, não poderá criar um banco de dados local e, se trabalhar para local, seu servidor de produção ficará fora de sincronia. E, finalmente, você não deseja excluir nenhum dado do servidor de produção.
Sintoma : Não é possível executar o Update-Database porque está tentando executar o script de criação e o banco de dados já possui tabelas com o mesmo nome.
Histórico do problema : O EF entende onde o banco de dados atual está comparado com o código, com base em uma tabela no banco de dados chamada dbo .__ MigrationHistory. Quando olha para os scripts de migração, ele tenta reconsilar onde estava com os scripts. Se não puder, apenas tenta aplicá-las em ordem. Isso significa que ele volta ao script de criação inicial e, se você observar a primeira parte do comando UP, será a CreeateTable da tabela em que o erro estava ocorrendo.
Para entender isso com mais detalhes, recomendo assistir aos dois vídeos mencionados aqui: https://msdn.microsoft.com/en-us/library/dn481501(v=vs.113).aspx
Solução : O que precisamos fazer é induzir a EF a pensar que o banco de dados atual está atualizado enquanto não aplica esses comandos CreateTable. Ao mesmo tempo, ainda queremos que esses comandos existam para que possamos criar novos bancos de dados locais.
Etapa 1: DB de produção limpo Primeiro, faça um backup do seu banco de dados de produção. No SSMS, clique com o botão direito do mouse no banco de dados, selecione "Tarefas> Exportar aplicativo da camada de dados ..." e siga as instruções. Abra seu banco de dados de produção e exclua / solte a tabela dbo .__ MigrationHistory.
Etapa 2: Limpeza do ambiente local Abra sua pasta de migrações e exclua-a. Estou assumindo que você pode recuperar tudo isso do git, se necessário.
Etapa 3: Recriar a inicial No Package Manager, execute "Enable-Migrations" (a EF solicitará que você use -ContextTypeName se você tiver vários contextos). Execute "Add-Migration Initial -verbose". Isso criará o script inicial para criar o banco de dados do zero com base no código atual. Se você teve alguma operação inicial no Configuration.cs anterior, copie-a.
Etapa 4: Truque EF Neste ponto, se executássemos o Update-Database , estaríamos recebendo o erro original. Portanto, precisamos induzir a EF a pensar que está atualizada, sem executar esses comandos. Portanto, entre no método Up na migração inicial que você acabou de criar e comente tudo.
Etapa 5: Atualizar banco de dados Sem código a ser executado no processo Up, o EF criará a tabela dbo .__ MigrationHistory com a entrada correta para dizer que executou esse script corretamente. Vá e confira se quiser. Agora, remova o comentário desse código e salve. Você pode executar o Update-Database novamente se quiser verificar se o EF está atualizado. Ele não executará a etapa Up com todos os comandos CreateTable, porque acha que já fez isso.
Etapa 6: confirmar se a EF está realmente atualizada Se você tinha um código que ainda não tinha migrações aplicadas a ele, foi isso que eu fiz ...
Executar "Migração Missing de Adicionar Migração" Isso criará praticamente um script vazio. Como o código já estava lá, havia realmente os comandos corretos para criar essas tabelas no script de migração inicial, então eu apenas cortei os comandos Drop e CreateTable e equivalentes nos métodos Para cima e Para baixo.
Agora, execute o Update-Database novamente e observe-o executar seu novo script de migração, criando as tabelas apropriadas no banco de dados.
Etapa 7: confirme novamente e confirme. Construa, teste, execute. Verifique se tudo está em execução e confirme as alterações.
Etapa 8: informe ao restante da equipe como proceder. Quando a próxima pessoa atualizar, a EF não saberá o que ocorreu, uma vez que os scripts executados antes não existem. Mas, supondo que os bancos de dados locais possam ser ampliados e recriados, tudo isso é bom. Eles precisarão descartar o banco de dados local e adicionar criá-lo da EF novamente. Se eles tiverem alterações locais e migrações pendentes, eu recomendo que eles criem seu banco de dados novamente no master, alternem para a ramificação de recursos e recriem esses scripts de migração do zero.
fonte
Só quero acrescentar à excelente resposta do @Lin:
5) B. Se você não possui o SQL Management Studio, vá para "SQL Server Object Explorer". Se você não conseguir ver o banco de dados do projeto no localdb "SQL Server Object Explorer", clique no botão "Adicionar servidor SQL" para adicioná-lo à lista manualmente. Em seguida, você pode excluir o banco de dados da lista.
fonte
Uma possível correção muito simples que funcionou para mim. Após excluir quaisquer referências e conexões do banco de dados encontradas no server / serverobject explorer, clique com o botão direito do mouse na pasta App_Data (não mostrou nenhum objeto no aplicativo para mim) e selecione Abrir. Uma vez aberto, coloque todo o banco de dados / etc. arquivos em uma pasta de backup ou, se você tiver coragem, exclua-os. Execute seu aplicativo e ele deve recriar tudo do zero.
fonte
Minha solução é mais adequada para :
- excluiu seu arquivo mdf
- deseja recriar seu db.
Para recriar seu banco de dados, você precisa adicionar a conexão usando o Visual Studio.
Etapa 1 : Vá para o Server Explorer e adicione uma nova conexão (ou procure um ícone add db).
Etapa 2 : Altere a fonte de dados para o arquivo de banco de dados do Microsoft SQL Server .
Etapa 3 : adicione qualquer nome de banco de dados desejado no campo Nome do arquivo de banco de dados . (De preferência o mesmo nome que você possui no atributo web.config AttachDbFilename )
Etapa 4 : clique em procurar e navegue até onde você deseja que ele esteja localizado.
Etapa 5 : no comando run do console do gerenciador de pacotes
update-database
fonte