Antes de portabilidade de EF6 EF núcleo: validar requisitos do aplicativoBefore porting from EF6 to EF Core: Validate your Application's Requirements

Antes de iniciar o processo de portabilidade é importante validar que o EF Core atende os requisitos de acesso de dados para seu aplicativo.Before you start the porting process it is important to validate that EF Core meets the data access requirements for your application.

Falta de recursosMissing features

Certifique-se de núcleo EF tem todos os recursos que você precisa usar em seu aplicativo.Make sure that EF Core has all the features you need to use in your application. Consulte comparação de recursos para uma comparação detalhada de como o conjunto de recursos no núcleo do EF compara com EF6.See Feature Comparison for a detailed comparison of how the feature set in EF Core compares to EF6. Se todos os recursos necessários estão ausentes, certifique-se de que você pode compensar a falta desses recursos antes de portar EF Core.If any required features are missing, ensure that you can compensate for the lack of these features before porting to EF Core.

Alterações de comportamentoBehavior changes

Esta é uma lista parcial de algumas alterações no comportamento entre EF6 e EF Core.This is a non-exhaustive list of some changes in behavior between EF6 and EF Core. É importante mantê-las em mente como a porta de seu aplicativo como eles podem alterar a maneira que seu aplicativo se comporta, mas não será exibida como erros de compilação após a troca para EF Core.It is important to keep these in mind as your port your application as they may change the way your application behaves, but will not show up as compilation errors after swapping to EF Core.

Comportamento de DbSet.Add/Attach e gráficoDbSet.Add/Attach and graph behavior

Em EF6, chamar DbSet.Add() em resultados de uma entidade em uma pesquisa recursiva para todas as entidades referenciadas em suas propriedades de navegação.In EF6, calling DbSet.Add() on an entity results in a recursive search for all entities referenced in its navigation properties. As entidades que são encontradas e já não são controladas pelo contexto, também são marcado como adicionado.Any entities that are found, and are not already tracked by the context, are also be marked as added. DbSet.Attach()se comporta da mesma, exceto pelo fato de todas as entidades são marcadas como inalterado.DbSet.Attach() behaves the same, except all entities are marked as unchanged.

EF Core executa uma pesquisa recursiva semelhante, mas com algumas regras ligeiramente diferentes.EF Core performs a similar recursive search, but with some slightly different rules.

  • A entidade de raiz está sempre no estado solicitado (adicionado para DbSet.Add e permanecem inalterados para DbSet.Attach).The root entity is always in the requested state (added for DbSet.Add and unchanged for DbSet.Attach).

  • Para entidades que são encontrados durante a pesquisa recursiva de propriedades de navegação:For entities that are found during the recursive search of navigation properties:

    • Se a chave primária da entidade é gerado pelo repositórioIf the primary key of the entity is store generated

      • Se a chave primária não está definida como um valor, o estado é definido como adicionado.If the primary key is not set to a value, the state is set to added. O valor de chave primária é considerado "não configurado" se ele é atribuído o valor padrão CLR para o tipo de propriedade (ou seja, 0 para int, null para string, etc.).The primary key value is considered "not set" if it is assigned the CLR default value for the property type (i.e. 0 for int, null for string, etc.).

      • Se a chave primária é definida como um valor, o estado é definido como inalterado.If the primary key is set to a value, the state is set to unchanged.

    • Se a chave primária não é um banco de dados gerado, a entidade é colocada no mesmo estado como a raiz.If the primary key is not database generated, the entity is put in the same state as the root.

Primeira inicialização de banco de dados de códigoCode First database initialization

EF6 tem uma quantidade significativa de magic executa em torno de selecionar a conexão de banco de dados e a inicialização de banco de dados. Algumas dessas regras incluem:EF6 has a significant amount of magic it performs around selecting the database connection and initializing the database. Some of these rules include:

  • Se nenhuma configuração é realizada, EF6 selecionará um banco de dados SQL Express ou LocalDb.If no configuration is performed, EF6 will select a database on SQL Express or LocalDb.

  • Se for uma cadeia de caracteres de conexão com o mesmo nome que o contexto dos aplicativos App/Web.config arquivo, essa conexão será usada.If a connection string with the same name as the context is in the applications App/Web.config file, this connection will be used.

  • Se o banco de dados não existir, ele será criado.If the database does not exist, it is created.

  • Se nenhuma das tabelas do modelo existe no banco de dados, o esquema para o modelo atual é adicionado ao banco de dados.If none of the tables from the model exist in the database, the schema for the current model is added to the database. Se as migrações são habilitadas, eles são usados para criar o banco de dados.If migrations are enabled, then they are used to create the database.

  • Se o banco de dados existe e EF6 já tiver criado o esquema, o esquema é verificado para compatibilidade com o modelo atual.If the database exists and EF6 had previously created the schema, then the schema is checked for compatibility with the current model. Uma exceção é gerada se o modelo foi alterado desde que o esquema foi criado.An exception is thrown if the model has changed since the schema was created.

Núcleo EF não executa essa mágica.EF Core does not perform any of this magic.

  • A conexão de banco de dados deve ser configurado explicitamente no código.The database connection must be explicitly configured in code.

  • Nenhuma inicialização é executada.No initialization is performed. Você deve usar DbContext.Database.Migrate() para aplicar as migrações (ou DbContext.Database.EnsureCreated() e EnsureDeleted() para criar/excluir o banco de dados sem o uso de migrações).You must use DbContext.Database.Migrate() to apply migrations (or DbContext.Database.EnsureCreated() and EnsureDeleted() to create/delete the database without using migrations).

Tabela de convenção de nomenclatura de primeiro do códigoCode First table naming convention

EF6 executa o nome da classe de entidade por meio de um serviço pluralização para calcular o nome da tabela padrão que a entidade é mapeada para.EF6 runs the entity class name through a pluralization service to calculate the default table name that the entity is mapped to.

Núcleo EF usa o nome do DbSet propriedade que a entidade é exposta no contexto de derivada.EF Core uses the name of the DbSet property that the entity is exposed in on the derived context. Se a entidade não tem um DbSet propriedade e, em seguida, o nome da classe é usada.If the entity does not have a DbSet property, then the class name is used.