2012-05-03 12 views
33

So che questa non è la soluzione più ideale, ma ho bisogno di aggiungere un campo autoincrementante a uno dei miei primi oggetti Codice EF. Questa colonna id NON è l'ID, che è un guid.Campo incrementale auto Entity Framework, che non è l'Id

Esiste comunque la possibilità di definire il campo di incremento automatico nel codice o creare personalmente la colonna e definire nel DB che il suo incremento automatico funzioni?

risposta

51

È possibile annotare tale proprietà con DatabaseGenerated(DatabaseGeneratedOption.Identity). EF consente solo una colonna di identità singola per tabella.

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

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

Avevo visto il DatabaseGeneratedOption.Identity ma tbh ero stato pigro e non l'avevo letto, ho solo dato per scontato che rendesse quella colonna il campo PKey. Grazie, ci provo. – JamesStuddart

+0

Funzionerà ancora con i database multi-tenant? – amd

+0

@Ahmad Non funzionerà se ogni inquilino ha il proprio seme – Eranga

6

Vecchio post ha pensato di condividere ciò che ho trovato con Entity Framework 6.1.3.

Ho creato una semplice libreria di livello dati utilizzando C# e .NET Framework 4.6.1, aggiunto un semplice repository/classe di servizio, una prima classe di contesto del codice e indirizzato il mio file web.config a un database SQL Express 2014 locale.

Nella classe di entità ho aggiunto il seguente costruttore di attributo alla colonna Id:

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

Poi ho creato una nuova migrazione digitando il seguente in Visual Studio 2015 Package Manager:

Add-migrazione

Assegnare un nome alla migrazione e quindi attendere che venga creata la classe DbMigtation. Modificare la classe e aggiungere la seguente operazione 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 tabella qui sopra è un esempio il punto chiave qui è la seguente annotazione costruttore:

nullable: false, identity: true 

Questo dice EF in modo da precisare la colonna come non nullabe e vuoi impostarlo come una colonna Identity da seminare da EF.

Eseguire la migrazione di nuovo con il seguente comando:

update-database 

Questo verrà eseguito la classe di migrazione cadere il tavolo prima (metodo di Down()), quindi la creazione della tabella (Up() metodo).

Esegui i test dell'unità e/o connettiti al database ed esegui una query di selezione dovresti vedere la tabella nel suo nuovo modulo, aggiungere alcuni dati esclusa la colonna Id e dovresti vedere i nuovi Guid (o qualsiasi tipo di dati che scegli) da generare.

Problemi correlati