wake-up-neo.com

EF Code First - wie setzt man Identity Seed?

Ich habe eine Entitätsklasse

public class Employee
{
    public long Id { get; set; }
    public string Name { get; set; }
}

Ich habe das ID-Feld als Primärschlüssel für die automatische Nummerngenerierung festgelegt

modelBuilder.Entity<Employee>().HasKey(e => e.Id);
modelBuilder.Entity<Employee>().Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

Aber ich möchte, dass die Identität von 10000 anstelle von 1 gesetzt wird, was die Standardeinstellung ist. Wie kann ich das in EF angeben?

29
Achinth Gurkhi

Wenn Sie SQL Server verwenden, müssen Sie einen benutzerdefinierten Datenbankinitialisierer erstellen und DBCC CHECKIDENT ('TableName', RESEED, NewSeedValue) manuell ausführen. Zum Erstellen und Verwenden eines benutzerdefinierten Initialisierers mit benutzerdefinierten SQL-Befehlen überprüfen Sie diese Antwort .

31
Ladislav Mrnka

Basierend auf der Antwort von Ladislav Mrnka könnten Sie dies in die Up-Methode Ihrer Migrationsdatei einfügen:

Sql("DBCC CHECKIDENT ('TableName', RESEED, NewSeedValue)");
14
ehsan88

Sie können auf jeden Fall die gleiche Ausgabe erzielen wie der Identitäts-Startwert "1000", indem Sie das Skript "DBCC CHECKIDENT ('TableName', RESEED, NewSeedValue)" aus der Up-Methode des Migrationsskripts ausführen.

Die Tabellendefinition in SQL Server zeigt jedoch immer noch "IDENTITY (1,1)", obwohl der erste in der Tabelle eingegebene Datensatz eine ID 1000 erhält. Dies bedeutet, dass der Identitätskeim der Tabelle tatsächlich nicht auf 1000 festgelegt wurde. Es ist nur so, dass die anfänglichen 999-Werte beim Erstellen des ersten Datensatzes verbraucht oder übersprungen werden, natürlich, weil Sie den Befehl RESEED an die DB abfeuern, dh Sie haben den bereits eingestellten SEED geändert.

Zusammenfassend sieht es so aus, als hätte Microsoft in EF core v2.1 nicht die Möglichkeit bereitgestellt, den Identitäts-Startwert beim Erstellen der Tabelle anzupassen. Hoffen wir, dass die zukünftigen Versionen von EF Core, wahrscheinlich 2.2 oder 3.0, diese Funktion haben werden. Gedanken ...?

0
Ankur Deshmukh

basierend auf @ ehsan88 können Sie eine Database Initialize-Klasse erstellen 

 public class AccDatabaseInitializer : CreateDatabaseIfNotExists<YourContect>
    {
      protected override void Seed(YourContect context)
       {
          context.Database.ExecuteSqlCommand("DBCC CHECKIDENT ('TableName', RESEED, NewSeedValue)");
           context.SaveChanges();
       }
    }

vielen Dank 

0
kareem khalil