2012-05-03 21 views
33

Sé que esta no es la solución más ideal, pero necesito agregar un campo de incremento automático a uno de mis objetos EF Code First. Esta columna no es ID, es un guid.Campo de incremento automático de Entity Framework, que no es Id

¿Hay alguna forma de definir el campo de incremento automático en el código, o crearía la columna yo mismo y definiría en el DB que su trabajo de incremento automático?

Respuesta

51

Puede anotar esa propiedad con DatabaseGenerated(DatabaseGeneratedOption.Identity). EF solo permite una sola columna de identidad por tabla.

public class Foo 
{ 
    [Key] 
    public Guid Id { get; set; } 

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public long Bar { get; set; } 
} 
+1

He visto DatabaseGeneratedOption.Identity pero tbh He sido flojo y no he leído nada, simplemente asumí que hizo que esa columna sea el campo PKey. Gracias, lo intentaré. – JamesStuddart

+0

¿Esto todavía funcionará con las bases de datos de múltiples propietarios? – amd

+0

@Ahmad No funcionará si cada inquilino tiene su propia semilla – Eranga

6

Publicación anterior Pensé que compartiría lo que encontré con Entity Framework 6.1.3.

Creé una biblioteca de capa de datos simple usando C# y .NET Framework 4.6.1, añadí una clase simple de repositorio/servicio, una primera clase de contexto de código y apunté mi archivo web.config a una base de datos local de SQL Express 2014.

En la clase de entidad que añade el siguiente constructor de atributos a la columna de Id:

[Key] 
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public Guid Id { get; set; } 

Entonces creó una nueva migración escribiendo lo siguiente en Visual Studio 2015 Gestor de paquetes:

Añadir a la migración

Asigne un nombre a la migración y espere a que se cree la clase DbMigtation. Editar la clase y añadir la siguiente operación CreateTable:

CreateTable(
"dbo.Article", 
    c => new 
    { 
     Id = c.Guid(nullable: false, identity: true), 
     Title = c.String(), 
     Content = c.String(), 
     PublishedDate = c.DateTime(nullable: false), 
     Author = c.String(), 
     CreateDate = c.DateTime(nullable: false), 
    }) 
    .PrimaryKey(t => t.Id); 
} 

La tabla anterior es un ejemplo del punto clave aquí es la siguiente anotación constructor:

nullable: false, identity: true 

Esto le dice a EF para specifiy la columna como no nullabe y desea establecerlo como una columna de identidad para ser sembrado por EF.

ejecutar de nuevo la migración con el siguiente comando:

update-database 

Esto ejecutará la clase de migración de eliminar la tabla primero (método de abajo()), entonces la creación del (método arriba()) mesa.

Ejecute las pruebas unitarias y/o conéctese a la base de datos y ejecute una consulta de selección. Debería ver su tabla en su nueva forma, agregar algunos datos excluyendo la columna Id y ver los nuevos Guid (o cualquier tipo de datos que elija) para ser generado.

Cuestiones relacionadas