Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tato stránka podrobně popisuje konfiguraci generování hodnot a vzory specifické pro zprostředkovatele SQLite. Doporučujeme nejprve přečíst obecnou stránku o generování hodnot.
Sloupce AUTOINCREMENT
Podle konvence jsou sloupce s číselnými primárními klíči nakonfigurované tak, aby se jejich hodnoty vygenerovaly při přidání, nastaveny pomocí funkce AUTOINCREMENT SQLite. Od EF Core 10 je možné funkci SQLite AUTOINCREMENT také povolit nebo zakázat prostřednictvím konfigurace.
Konfigurace funkce AUTOINCREMENT
Podle konvence se celočíselné primární klíče automaticky konfigurují pomocí funkce AUTOINCREMENT, pokud nejsou součástí složeného klíče a nemají na nich cizí klíč. Je však možné, že budete muset explicitně nakonfigurovat vlastnost tak, aby používala funkci SQLite AUTOINCREMENT, pokud má vlastnost převod hodnoty z jiného než celočíselného typu nebo při přepsání konvencí:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Id)
.HasConversion<int>()
.UseAutoincrement();
}
Zakázání funkce AUTOINCREMENT pro výchozí generování hodnot SQLite
Funkce AUTOINCREMENT v porovnání s výchozím algoritmem generování klíčů v SQLite – ROWID ukládá další režii procesoru, paměti, místa na disku a vstupně-výstupních operací disku. Nevýhodou ROWID je, že opakovaně používá hodnoty z odstraněných řádků. Pokud by to nemělo vliv na váš scénář, můžete místo toho zakázat funkci AUTOINCREMENT a místo toho použít výchozí chování generování hodnot SQLite. Můžete to provést pomocí rozhraní API metadat:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Id)
.Metadata.SetValueGenerationStrategy(SqliteValueGenerationStrategy.None);
}
Případně můžete nakonfigurovat ef tak, aby vlastnost nebrala jako vygenerovanou hodnotu:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Id)
.ValueGeneratedNever();
}
To znamená, že je na aplikaci, aby před uložením do databáze dodala hodnotu vlastnosti. Mějte na paměti, že to stále nezakáže výchozí generování hodnot na straně serveru, takže při ne-EF použití může být stále vygenerována hodnota. Chcete-li zcela zakázat generování hodnot, změňte typ sloupce z INTEGER na INT.