SQL Server Wert GenerierungSQL Server Value Generation

Diese Seite enthält Details zur Konfiguration der Wert Generierung und Muster, die für den SQL Server-Anbieter spezifisch sind.This page details value generation configuration and patterns that are specific to the SQL Server provider. Es wird empfohlen, zuerst die Seite Allgemein der Wert Generierungzu lesen.It's recommended to first read the general page on value generation.

IDENTITY-SpaltenIDENTITY columns

Gemäß der Konvention werden numerische Spalten, die so konfiguriert sind, dass ihre Werte bei Add generiert werden, als SQL Server Identitäts Spalteneingerichtet.By convention, numeric columns that are configured to have their values generated on add are set up as SQL Server IDENTITY columns.

Seed und InkrementSeed and increment

Standardmäßig beginnen Identitäts Spalten bei 1 (dem Startwert) und werden jedes Mal um 1 erhöht, wenn eine Zeile hinzugefügt wird (das Inkrement).By default, IDENTITY columns start off at 1 (the seed), and increment by 1 each time a row is added (the increment). Sie können einen anderen Ausgangs Ausgangs-und Inkrement wie folgt konfigurieren:You can configure a different seed and increment as follows:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>()
        .Property(b => b.BlogId)
        .UseIdentityColumn(seed: 10, increment: 10);
}

Hinweis

Die Möglichkeit zum Konfigurieren des Identitäts Ausgangs und-Inkrements wurde in EF Core 3,0 eingeführt.The ability to configure IDENTITY seed and increment was introduced in EF Core 3.0.

Einfügen von expliziten Werten in Identitäts SpaltenInserting explicit values into IDENTITY columns

Standardmäßig lässt SQL Server das Einfügen expliziter Werte in Identitäts Spalten nicht zu.By default, SQL Server doesn't allow inserting explicit values into IDENTITY columns. Zu diesem Zweck müssen Sie vor dem Aufrufen von manuell aktivieren IDENTITY_INSERT SaveChanges() , wie im folgenden beschrieben:To do so, you must manually enable IDENTITY_INSERT before calling SaveChanges(), as follows:

using (var context = new ExplicitIdentityValuesContext())
{
    context.Blogs.Add(new Blog { BlogId = 100, Url = "http://blog1.somesite.com" });
    context.Blogs.Add(new Blog { BlogId = 101, Url = "http://blog2.somesite.com" });

    context.Database.OpenConnection();
    try
    {
        context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Employees ON");
        context.SaveChanges();
        context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Employees OFF");
    }
    finally
    {
        context.Database.CloseConnection();
    }
}

Hinweis

Die Automatisierung dieses Vorgangs im SQL Server-Anbieter ist eine Featureanforderung, die sich im Backlog befindet.We have a feature request on our backlog to do this automatically within the SQL Server provider.

SequenzenSequences

Als Alternative zu Identitäts Spalten können Standardsequenzen verwendet werden.As an alternative to IDENTITY columns, you can use standard sequences. Dies kann in verschiedenen Szenarien nützlich sein: Beispielsweise kann es sein, dass mehrere Spalten ihre Standardwerte aus einer einzelnen Sequenz zeichnen.This can be useful in various scenarios; for example, you may want to have multiple columns drawing their default values from a single sequence.

SQL Server ermöglicht das Erstellen von Sequenzen und deren Verwendung, wie auf der Seite Allgemein in Sequenzenbeschrieben.SQL Server allows you to create sequences and use them as detailed in the general page on sequences. Sie müssen ihre Eigenschaften so konfigurieren, dass Sie Sequenzen über verwenden HasDefaultValueSql() .It's up to you to configure your properties to use sequences via HasDefaultValueSql().