Generowanie wartości programu SQL Server

Ta strona zawiera szczegóły konfiguracji generowania wartości i wzorców specyficznych dla dostawcy programu SQL Server. Zaleca się najpierw przeczytanie strony ogólnej generowania wartości.

Kolumny IDENTITY

Zgodnie z konwencją kolumny liczbowe skonfigurowane pod kątem ich wartości wygenerowanych w dodatku są konfigurowane jako kolumny TOŻSAMOŚCI programu SQL Server.

Inicjacja i przyrost

Domyślnie kolumny IDENTITY zaczynają się od 1 (inicjacji) i zwiększają się o 1 za każdym razem, gdy wiersz jest dodawany (przyrost). Można skonfigurować inną inicjację i przyrost w następujący sposób:

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

Wstawianie jawnych wartości do kolumn IDENTITY

Domyślnie program SQL Server nie zezwala na wstawianie jawnych wartości do kolumn IDENTITY. Aby to zrobić, należy ręcznie włączyć IDENTITY_INSERT przed wywołaniem metody SaveChanges(), w następujący sposób:

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.Blogs ON");
        context.SaveChanges();
        context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Blogs OFF");
    }
    finally
    {
        context.Database.CloseConnection();
    }
}

Uwaga

Mamy żądanie funkcji na naszej liście prac, aby to zrobić automatycznie w ramach dostawcy programu SQL Server.

Sekwencje

Alternatywą dla kolumn IDENTITY jest użycie standardowych sekwencji. Może to być przydatne w różnych scenariuszach; Na przykład możesz chcieć, aby wiele kolumn rysowania ich wartości domyślnych z jednej sekwencji.

Program SQL Server umożliwia tworzenie sekwencji i używanie ich zgodnie z opisem na stronie ogólnej w sekwencjach. Należy skonfigurować właściwości tak, aby używały sekwencji za pomocą polecenia HasDefaultValueSql().

Identyfikatory guid

W przypadku kluczy podstawowych IDENTYFIKATOR GUID dostawca automatycznie generuje optymalne wartości sekwencyjne, podobnie jak funkcja NEWSEQUENTIALID programu SQL Server. Generowanie wartości na kliencie jest bardziej wydajne w niektórych scenariuszach, tj. dodatkowa runda bazy danych nie jest potrzebna, aby uzyskać wartość wygenerowaną przez bazę danych, gdy element zależny jest również wstawiony, który odwołuje się do tego klucza.

Aby program EF wygenerował te same wartości identyfikatora GUID sekwencyjnego dla właściwości innych niż klucz, skonfiguruj je w następujący sposób:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>().Property(b => b.Guid).HasValueGenerator(typeof(SequentialGuidValueGenerator));
}

Rowversions

Program SQL Server ma rowversion typ danych, który automatycznie zmienia się za każdym razem, gdy wiersz zostanie zaktualizowany. To sprawia, że jest to bardzo przydatne jako token współbieżności, w przypadku zarządzania przypadkami, w których ten sam wiersz jest jednocześnie aktualizowany przez wiele transakcji.

Aby w pełni zrozumieć tokeny współbieżności i sposób ich używania, przeczytaj dedykowaną stronę dotyczącą konfliktów współbieżności. Aby zamapować byte[] właściwość na kolumnę rowversion , skonfiguruj ją w następujący sposób:

public class Person
{
    public int PersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    [Timestamp]
    public byte[] Version { get; set; }
}