Eu tenho um modelo de entidade code-first no EF5. Mas eu quero gerenciar as alterações do banco de dados manualmente - não quero que EF modifique meu banco de dados existente e todos os seus dados. Mas quando faço alterações paralelas no mapeamento do EF e no banco de dados, o EF se recusa a operar adequadamente, dizendo que preciso usar primeiro a migração de código. Como faço para desligar isso?
entity-framework
migration
code-first
Stan Hargrove
fonte
fonte
Respostas:
defina o Database.SetInitializer como null.
public class DatabaseContext: DbContext { //the base accepts the name of the connection string provided in the web.config as a parameter public DatabaseContext() : base("DatabaseContext") { //disable initializer Database.SetInitializer<DatabaseContext>(null); }
fonte
__MigrationHistory
não ter a migração mais recente e não querer faça isto de qualquer maneira. No meu caso, uso migrações no ambiente de desenvolvimento, mas quando implanto para produção, uso SSDT para atualizar o banco de dados. Portanto, EF reclamaria que o modelo mudou porque__MigrationHistory
não teria a migração mais recente, mas posso garantir que o banco de dados está atualizado.Database.SetInitializer
do construtor para o construtor da classe. Isso garante que a chamada seja feita apenas uma vez.Portanto, a resposta mais completa que encontrei é esta:
Migrations
pasta dentro do seu projeto.Database.SetInitializer<DatabaseContext>(null);
dentro de seu inicializador DatabaseContext.__MigrationHistory
seu banco de dados. Para EF6 +, a tabela está localizada em,Tables
mas para versões anteriores, está localizada emSystem Tables
.fonte
__MigrationHistory
cada vez que meu aplicativo é inicializado, o que adiciona alguns milissegundos a mais ao tempo de inicialização do meu aplicativo. Existe uma maneira de desabilitar__MigrationHistory
totalmente a verificação?Se você deseja desativar completamente as migrações:
https://stackoverflow.com/a/9709407/141172
No entanto, achei melhor manter as migrações de código primeiro habilitadas, mas use a
-Script
opção de fazer com que EF crie um script de mudança de banco de dados para mim que eu possa aplicar a cada banco de dados (desenvolvimento, controle de qualidade, produção) manualmente:Update-Database -Script -ProjectName MyProject -StartupProjectName MyProject
Dessa forma, EF criará o script de alteração para mim, e ainda tenho controle total sobre as alterações que estão sendo aplicadas. Eu faço a versão dos scripts de mudança como qualquer outro código-fonte.
fonte
completely turn off migrations
. Para fazer isso: adicioneDatabase.SetInitializer<YourContextType>(null)
à inicialização do seu aplicativoSe você já usou Migrations, alterar apenas o Initializer não ajudará. Você precisa ir ao Management Studio, abrir as tabelas do banco de dados, ir para a
System Tables
pasta e remover a__MigrationHistory
tabela que está localizada lá (para EF6 e superior, está localizado diretamente abaixoTables
). Isso desativará definitivamente as migrações.fonte
System Tables
.sp_rename
. Eu também desativei o inicializador.Acabei de resolver este "problema" por
A configuração do meu ambiente está seguindo
1. Visual Studio 2017 15.8.2 2. ASP NET MVC project 3. .NET Framework 4.6.1 4. Entity Framework 6.2.0
fonte
_MigrationHistory
tabela automaticamente?