3
respostas

Como o Entity Core criou o migration Inicial ?

A minha dúvida é , ele já criou a primeira migração baseada no que ??

Porque eu deveria informar o nome da tabela, os índices e as colunas.

Como que o entity criou o migration inicial simplesmente baseado no comando Add-Migration Inicial ?

3 respostas

Olá, rcoproc

Uma das maneiras de incluir as entidades do modelo na migração é adicionar propriedades DbSet<Entidade> na classe do contexto (DbContext):

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

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

    }
}

Se você adicionar uma outra propriedade com DbSet nessa classe e enviar um comando Add-Migration, a migração vai incluir a entidade adicionada no contexto.

Essa abordagem também é chamada de Model-First, pois o modelo é criado antes do banco de dados.

Ok.. entendi e neste exemplo :

DbSet ItensPedido

A tabela se chamará ItensPedido ???

E se eu quiser colocar outro padrão de nomes da tabela inclusive em outro SCHEMA do banco de dados é possível ???

Ok.. entendi e neste exemplo :

DbSet ItensPedido

A tabela se chamará ItensPedido ???

Não, ela será pluralizada e se chamará ItensPedidos.

E se eu quiser colocar outro padrão de nomes da tabela inclusive em outro SCHEMA do banco de dados é possível ???

O Entity Framework Core 2.0 trouxe alguns "hooks" (ganchos) que permitem customiza a pluralização/singularização dos nomes do modelo (obs: a página está traduzida automaticamente, então o texto pode parecer meio estranho):

https://docs.microsoft.com/pt-br/ef/core/what-is-new/ef-core-2.0

Gerenciamento de banco de dados

Gancho de pluralização de scaffolding de DbContext O EF Core 2.0 apresenta um novo serviço IPluralizer que é usado para singularizar os nomes de tipo de entidade e pluralizar os nomes DbSet. A implementação padrão é não operacional, portanto, este é apenas um gancho que o pessoal pode conectar facilmente em seu próprios pluralizadores. Esta é a aparência para um desenvolvedor conectar seu próprio pluralizador:

public class MyDesignTimeServices : IDesignTimeServices
{
    public void ConfigureDesignTimeServices(IServiceCollection services)
    {
        services.AddSingleton<IPluralizer, MyPluralizer>();
    }
}

public class MyPluralizer : IPluralizer
{
    public string Pluralize(string name)
    {
        return Inflector.Inflector.Pluralize(name) ?? name;
    }

    public string Singularize(string name)
    {
        return Inflector.Inflector.Singularize(name) ?? name;
    }
}