Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Esta é uma lista não completa de alterações no comportamento entre o EF6 e o EF Core. É importante ter isso em mente ao portar seu aplicativo, pois isso pode mudar a maneira como seu aplicativo se comporta, mas não aparecerá como erros de compilação após a mudança para o EF Core.
Isso serve como uma revisão de alto nível a ser considerada como parte do processo de portabilidade. Para obter instruções mais detalhadas, caso a caso, leia os casos detalhados.
Comportamento de DbSet.Add/Attach e gráficos
No EF6, chamar DbSet.Add() em uma entidade resulta em uma busca recursiva por todas as entidades referenciadas em suas propriedades de navegação. Todas as entidades encontradas e que ainda não foram rastreadas pelo contexto também são marcadas como adicionadas.
DbSet.Attach() se comporta da mesma forma, exceto que todas as entidades são marcadas como inalteradas.
O EF Core executa uma pesquisa recursiva semelhante, mas com algumas regras ligeiramente diferentes.
- Se a entidade raiz estiver configurada para uma chave gerada e a chave não estiver definida, ela será colocada no
Addedestado. -
Para entidades encontradas durante a pesquisa recursiva das propriedades de navegação:
-
Se a chave primária da entidade for gerada automaticamente
- Se a chave primária não estiver definida como um valor, o estado será definido como adicionado. O valor da chave primária será considerado "não definido" se for atribuído o valor padrão CLR para o tipo de propriedade (por exemplo,
0paraint,nullparastring, etc.). - Se a chave primária for definida como um valor, o estado será definido como inalterado.
- Se a chave primária não estiver definida como um valor, o estado será definido como adicionado. O valor da chave primária será considerado "não definido" se for atribuído o valor padrão CLR para o tipo de propriedade (por exemplo,
- Se a chave primária não for gerada pelo banco de dados, a entidade será colocada no mesmo estado que a raiz.
-
Se a chave primária da entidade for gerada automaticamente
- Essa alteração de comportamento só se aplica aos métodos dos grupos
AttacheUpdate.Addsempre coloca entidades noAddedestado, mesmo que a chave esteja definida. -
Attachmétodos inserem entidades cujas chaves estão definidas no estadoUnchanged. Isso facilita "inseri-lo se novo, caso contrário, mantenha-o inalterado". OsUpdatemétodos inserem entidades com chaves definidas noModifiedestado. Isso facilita "inseri-lo se novo, caso contrário, atualize-o".
A filosofia geral aqui é que Update é uma maneira muito simples de lidar com inserções e atualizações de entidades desconectadas. Ele garante que todas as novas entidades sejam inseridas e que todas as entidades existentes sejam atualizadas.
Ao mesmo tempo, Add ainda fornece uma maneira fácil de forçar a inserção de entidades. Adicionar é útil principalmente somente quando não estiver usando chaves geradas pelo repositório, de modo que o EF não saiba se a entidade é nova ou não.
Para obter mais informações sobre esses comportamentos no EF Core, leia Controle de Alterações no EF Core.
Inicialização do banco de dados Code First
O EF6 tem uma quantidade significativa de magia executada em torno da seleção da conexão de banco de dados e da inicialização do banco de dados. Algumas dessas regras incluem:
- Se nenhuma configuração for executada, o EF6 selecionará um banco de dados no SQL Express ou localDb.
- Se uma cadeia de conexão com o mesmo nome que o contexto estiver no arquivo do
App/Web.configaplicativo, essa conexão será usada. - Se o banco de dados não existir, ele será criado.
- Se nenhuma das tabelas do modelo existir no banco de dados, o esquema do modelo atual será adicionado ao banco de dados. Se as migrações estiverem habilitadas, elas serão usadas para criar o banco de dados.
- Se o banco de dados existir e o EF6 tiver criado o esquema anteriormente, o esquema será verificado quanto à compatibilidade com o modelo atual. Uma exceção será gerada se o modelo tiver sido alterado desde que o esquema foi criado.
O EF Core não executa nenhuma desta mágica.
- A conexão de banco de dados deve ser configurada explicitamente no código.
- Nenhuma inicialização é executada. Você deve usar
DbContext.Database.Migrate()para aplicar migrações (ouDbContext.Database.EnsureCreated()eEnsureDeleted()criar/excluir o banco de dados sem usar migrações).
Convenção de nomenclatura de tabelas do Code First
O EF6 executa o nome da classe de entidade por meio de um serviço de pluralização para calcular o nome da tabela padrão para o qual a entidade está mapeada.
O EF Core usa o nome da DbSet propriedade na qual a entidade é exposta no contexto derivado. Se a entidade não tiver uma DbSet propriedade, o nome da classe será usado.
Para obter mais informações, leia Gerenciando esquemas de banco de dados.