2012-05-03 6 views
33

Ich weiß, das ist nicht die ideale Lösung, aber ich muss ein Auto inkrementieren Feld zu einem meiner EF-Code-First-Objekte hinzufügen. Diese Spalte hat NICHT die ID, was eine GUID ist.Entity Framework automatisch inkrementieren Feld, das ist nicht die ID

Gibt es überhaupt für mich zu definieren, das Auto-Inkrementieren-Feld in Code oder würde die Spalte selbst erstellen und in der DB definieren, dass seine automatische Inkrementierung funktioniert?

Antwort

51

Sie können diese Eigenschaft mit DatabaseGenerated(DatabaseGeneratedOption.Identity) annotieren. EF erlaubt nur eine Identitätsspalte pro Tabelle.

+1

Ich hatte die DatabaseGeneratedOption.Identity gesehen, aber tbh ich war faul und hatte nicht hineingelesen, ich nahm nur an, dass es die Spalte das PKey-Feld machte. Danke, ich werde es versuchen. – JamesStuddart

+0

Funktioniert das noch mit Multitenant-Datenbanken? – amd

+0

@Ahmad Es wird nicht funktionieren, wenn jeder Mandant seinen eigenen Seed hat – Eranga

6

Alte Post dachte ich würde teilen, was ich mit Entity Framework 6.1.3 gefunden habe.

Ich habe eine einfache Datenschichtbibliothek mit C# und .NET Framework 4.6.1 erstellt, eine einfache Repository/Service-Klasse, eine erste Codekontextklasse hinzugefügt und meine web.config-Datei auf eine lokale SQL Express 2014-Datenbank gelenkt. Ich

In der Entity-Klasse hinzugefügt, um das folgende Attribut Konstruktor der Spalte Id:

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

Dann habe ich eine neue Migration durch die folgende in Visual Studio 2015 Package Manager eingeben:

Add-Migration

Geben Sie der Migration einen Namen und warten Sie dann, bis die DbMig- tation-Klasse erstellt wurde. Bearbeiten Sie die Klasse und fügen Sie den folgenden Create Betrieb:

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); 
} 

Die obige Tabelle ist ein Beispiel der entscheidende Punkt ist hier die folgende builder Anmerkung:

nullable: false, identity: true 

Dies sagt EF die Spalte specifiy als nicht nullabe und Sie möchten es als Identitätsspalte festlegen, die von EF gesetzt werden soll.

Führen Sie die Migration erneut mit dem folgenden Befehl:

update-database 

Dadurch wird die Migration Klasse fallen zuerst die Tabelle (Down() -Methode), dann die Erstellung der Tabelle (Up() -Methode) ausgeführt werden.

Führen Sie Ihre Komponententests und/oder verbinden Sie mit der Datenbank und führen Sie eine Select-Abfrage, sollten Sie Ihre Tabelle in seiner neuen Form sehen, fügen Sie einige Daten mit Ausnahme der Id-Spalte und Sie sollten neue Guid sehen (oder was für Datentyp Sie wählen) erzeugt werden.

Verwandte Themen