Generování hodnot SQL Serveru
Tato stránka podrobně popisuje konfiguraci generování hodnot a vzory specifické pro poskytovatele SQL Serveru. Doporučujeme nejprve přečíst obecnou stránku o generování hodnot.
Sloupce IDENTITY
Podle konvence jsou číselné sloupce, které jsou nakonfigurované tak, aby se jejich hodnoty vygenerovaly při přidání, nastaveny jako sloupce IDENTITY SQL Serveru.
Počáteční a přírůstkové
Ve výchozím nastavení začínají sloupce IDENTITY od 1 (počáteční hodnoty) a při každém přidání řádku (přírůstku) se zvýší o 1. Můžete nakonfigurovat jiné počáteční a přírůstky následujícím způsobem:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.BlogId)
.UseIdentityColumn(seed: 10, increment: 10);
}
Vložení explicitních hodnot do sloupců IDENTITY
SQL Server ve výchozím nastavení neumožňuje vkládání explicitních hodnot do sloupců IDENTITY. Chcete-li to provést, musíte před voláním SaveChanges()
ručně povolit IDENTITY_INSERT
následující:
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();
}
}
Poznámka
V backlogu máme žádost o funkci, která to provede automaticky v rámci poskytovatele SQL Serveru.
Sekvence
Jako alternativu ke sloupcům IDENTITY můžete použít standardní sekvence. To může být užitečné v různých scénářích; Můžete například chtít mít více sloupců, které nakreslily výchozí hodnoty z jedné sekvence.
SQL Server umožňuje vytvářet sekvence a používat je tak, jak je podrobně popsáno na stránce obecné na sekvencích. Je na vás, abyste své vlastnosti nakonfigurovali tak, aby používaly sekvence prostřednictvím HasDefaultValueSql()
.
Guid
U primárních klíčů GUID poskytovatel automaticky generuje optimální sekvenční hodnoty podobné funkci NEWSEQUENTIALID SYSTÉMU SQL Server. Generování hodnoty v klientovi je efektivnější v některých scénářích, tj. k získání hodnoty vygenerované databáze není potřeba další doba odezvy databáze, pokud se na tento klíč vkládá také závislý odkaz.
Pokud chcete, aby ef vygeneroval stejné sekvenční hodnoty GUID pro vlastnosti bez klíče, nakonfigurujte je následujícím způsobem:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>().Property(b => b.Guid).HasValueGenerator(typeof(SequentialGuidValueGenerator));
}
Verze řádků
SQL Server má rowversion
datový typ, který se automaticky změní při každé aktualizaci řádku. Díky tomu je velmi užitečný jako token souběžnosti pro správu případů, kdy je stejný řádek současně aktualizován více transakcemi.
Pokud chcete plně porozumět tokenům souběžnosti a jejich používání, přečtěte si vyhrazenou stránku o konfliktech souběžnosti. Pokud chcete namapovat byte[]
vlastnost na rowversion
sloupec, nakonfigurujte ji následujícím způsobem:
public class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[Timestamp]
public byte[] Version { get; set; }
}
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro