EF Core – Número sequencial customizável.

Criar um número sequencial é simples, mas e se ele tiver que começar de um determinado valor? E se precisar que seja incrementado de outra maneira? Aprenda como fazer!

Utilizar o EF Core facilita muito o processo de desenvolvimento, vamos aprender a configurar uma sequência customizada para evitar configurações extras no BD e deixar mais esta responsabilidade com nossa aplicação.

Neste exemplo vamos supor que possuímos uma classe Pedido e que possui uma propriedade código. Em código nós queremos que esse número inicie em 1000 no banco de dados e que seja incrementado automaticamente de 1 em 1.

O códigos a seguir explicam onde e como fazer esta simples configuração.

Primeiramente configuramos o contexto para criar uma sequencia chamada “MinhaSequencia” que inicia em 1000 e incrementa de 1 em 1.

Na configuração do mapeamento da entidade no EF basta apontar que aquela propriedade vai utilizar uma sequence conhecida:

Basta agora criar a Migration e rodar um “update-database” que estará tudo funcionando perfeitamente.


Vamos continuar a troca de experiências, deixe seu comentário abaixo. Se gostou e concorda com o artigo, compartilhe com seus colegas para transmitirmos o conhecimento para o máximo de pessoas possíveis.

8 pensou em “EF Core – Número sequencial customizável.

  1. Pensando em manter as regras no domínio, vê algum problema em passar a geração para o banco? Sei que no banco temos a vantagem de garantir a concorrência out of box, porém estaríamos tirando essa lógica de dentro domínio não?

    • Nesse caso a geração precisa partir de um número personalizado e daí para frente esse número não interfere nos negócios. Se o seu valor depende de alguma regra de negócio ou gera algum impacto na forma que funciona o negócio talvez não seja a alternativa ideal.

  2. Parabéns pelo artigo Eduardo, só me tira uma duvida… se a minha necessidade for gerar um numero sequencial, porém precedido por uma sigla definida pela entidade mãe, por exemplo, a entidade Projeto tem uma ou mais entidades Tarefas relacionadas a ela, e dentro do Projeto tem uma propriedade Sigla com conteúdo “PRJ”. Ao gerar uma tarefa deste projeto o campo sequencial da tarefa deveria ser “PRJ-001”, “PRJ-002”, “PRJ-003” e assim por diante.
    Neste caso, qual abordagem de criação automática seria mais apropriada?
    Muito obrigado

  3. Desta forma eu consigo o ID preenchido no objeto antes do SaveChanges(), ou mesmo com esta nova metodologia, eu ainda preciso chamar o SaveChanges para ter o ID ?

  4. Boa noite Eduardo, visualizando esse artigo deparei com uma duvida um pouco mais complexa: A possibilidade de valor gerado ser um DateTime.Now + um numeral sequencial, exemplo hoje seria 20190421001, 20190421002… Assim por diante. Mas que seja resetado no dia seguinte, ou seja, amanhã 20190421001 etc…

  5. Eduardo, existe possibilidade de concorrência devido ao lifecycle do Entity Framework ser por padrão Scoped (por requisição)?

Os comentários estão fechados.