¿Cómo configurar una columna de identidad usando Entity Framework Core?

c# entity-framework-core

Pregunta

¿Cómo creo una columna de identidad de incremento automático en Entity Framework Core?

Obviamente puedo hacerlo usando API fluida para EF6 por ejemplo.

Respuesta aceptada

Como hay muy poca documentación de EF7, gran parte de lo que sabemos tenemos que extraer de las pruebas de fuente o unidad. De acuerdo con las siguientes dos pruebas unitarias en la fuente EF7 ...

Aqui y aqui

Configurarías una propiedad para Identidad como esta:

b.Property(e => e.Id).ForSqlServer().UseIdentity();

Y configurarías una propiedad para secuencias como esta:

ForSqlServer().UseSequence();

Las direcciones URL han cambiado debido a la reorganización de aspnet-core, y los métodos también han cambiado desde que se solicitó por primera vez.

Aqui y aqui

if (_useSequence) 
{
    b.Property(e => e.Identifier).ForSqlServerUseSequenceHiLo();
} 
else 
{
    b.Property(e => e.Identifier).UseSqlServerIdentityColumn();
}

Es posible que estas direcciones URL vuelvan a cambiar (por eso incluyo el código relevante), pero es ridículamente fácil simplemente mirar la URL e ir al sitio y averiguar cuál es la nueva URL.

Realmente, el punto central de mi respuesta es que puedes resolver esto solo yendo a ver las pruebas unitarias en el código fuente de GitHub. No deberías necesitar que alguien te la ponga con una cuchara.

EDITAR: Enlaces actualizados a la versión 2.1 (todavía funciona para 1.1 y 2.0 también)


Respuesta popular

En la última versión de EF7 hay un nuevo método de extensión para establecer la columna de identidad

protected override void OnModelCreating(ModelBuilder modelBuilder)
{    
  modelBuilder.Entity<MyEntity>(b =>
  {
    b.HasKey(e => e.Identifier);
    b.Property(e => e.Identifier).ValueGeneratedOnAdd();
  });
}


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué