2015-04-15 18 views
11

Wie erstelle ich eine Identity-Spalte mit automatischer Inkrementierung in Entity Framework 7?EF7 Konfigurieren einer Identitätsspalte

Offensichtlich kann ich es mit flüssigen API für EF6 zum Beispiel tun.

+1

Nichts Besonderes Ich denke, die Standardarbeit eines Id-Feldes ist eine inkrementierende Identitätsspalte. Hat dir das ein Problem bereitet? –

+0

Es wurde standardmäßig als Sequenz geändert. :( –

+0

Ich habe EF7 selbst noch nicht benutzt, aber wenn ich [Beispiele] (http://chad.tolkien.id.au/asp-net-vnext-mvc6-ground-up-3-entity-framework- 7 /) [online] (http://stephenwalther.com/archive/2015/01/17/asp-net-5-and-angularjs-part-4-using-entity-framework-7), jedes Modell hat nur ein 'int Id'-Feld als Primärschlüssel –

Antwort

13

Da es sehr wenig EF7-Dokumentation gibt, müssen wir viel von dem, was wir wissen, aus den Quell- oder Komponententests entnehmen. Nach den beiden folgenden Unit-Tests in der EF7 Quelle ...

Here und Here

Sie würden eine Eigenschaft für Identität wie folgt konfiguriert werden:

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

Und Sie würden eine Eigenschaft konfigurieren für Sequenzen wie diese:

ForSqlServer().UseSequence(); 

Die URLs haben sich aufgrund der Aspnet-Core-Reorganisation geändert, und die Methoden haben sich seit der ersten Abfrage ebenfalls geändert.

Here und Here

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

Es ist möglich, diese URLs könnte wieder ändern (weshalb ich den entsprechenden Code), aber es ist lächerlich einfach zu in der URL sieht gerade und auf die Website zu gehen und herauszufinden, Was ist die neue URL?

Wirklich, der ganze Punkt meiner Antwort ist, dass Sie diese Sache selbst herausfinden können, indem Sie einfach gehen und die Komponententests im Quellcode auf GitHub betrachten. Sie sollten nicht jemanden brauchen, um es zu füttern.

2

Hier ist, wie es explizit für den Fall, dass Sie möchten, oder es ist nicht das Standardverhalten.

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{  
    modelBuilder.Entity<MyEntity>(b => 
    { 
    b.Key(e => e.Identifier); 
    b.Property(e => e.Identifier).ForSqlServer().UseIdentity(); 
    } 
} 
6

Mit neuestem Bits EF (beta 7, vielleicht früher und bis zu RC1) sollten Sie

builder.Entity<ApplicationUser>().Property<int>(nameof(ApplicationUser.AccountNo)) 
      .UseSqlServerIdentityColumn() 
+0

danke.UseSqlServerIdentityColumn ist, wie es jetzt gemacht wird, einschließlich der RC1 final, also denke ich, dass diese API bleiben wird. –

+0

Danke, aktualisieren Sie die Antwort, um explizit anzugeben, dass RC1 – codevision

19

In neuester Version von EF7 verwenden gibt es eine neue Erweiterungsmethode Identitätsspalte

einstellen
+1

neueste und richtige Antwort unterstützt! – mxii

+0

Dies sollte definitiv die richtige Antwort sein ... – WillHua

Verwandte Themen