Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Esta página detalha a configuração de geração de valor e os padrões específicos para o provedor SQLite. É recomendável ler primeiro a página geral sobre a geração de valor.
Colunas AUTOINCREMENT
Por convenção, as colunas de chave primária numérica configuradas para ter seus valores gerados na adição são configuradas com o recurso AUTOINCREMENT do SQLite. A partir do EF Core 10, o SQLite AUTOINCREMENT também pode ser habilitado ou desabilitado por meio da configuração.
Configurando AUTOINCREMENT
Por convenção, as chaves primárias inteiras são automaticamente configuradas com AUTOINCREMENT quando não fazem parte de uma chave composta e não têm uma chave estrangeira associada a elas. No entanto, talvez seja necessário configurar explicitamente uma propriedade para usar SQLite AUTOINCREMENT quando a propriedade tiver uma conversão de valor de um tipo não inteiro ou ao substituir convenções:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Id)
.HasConversion<int>()
.UseAutoincrement();
}
Desabilitando AUTOINCREMENT para geração padrão de valor do SQLite
AUTOINCREMENT impõe uma sobrecarga extra de CPU, memória, espaço em disco e E/S de disco em comparação com o algoritmo de geração de chave padrão no SQLite – ROWID. A desvantagem de ROWID é que ele reutiliza valores de linhas excluídas. Se o cenário não for afetado por isso, convém desabilitar AUTOINCREMENT e usar o comportamento de geração de valor padrão do SQLite. Você pode fazer isso usando a API de Metadados:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Id)
.Metadata.SetValueGenerationStrategy(SqliteValueGenerationStrategy.None);
}
Como alternativa, você pode configurar o EF para não tratar a propriedade como gerada por valor:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Id)
.ValueGeneratedNever();
}
Isso significa que cabe ao aplicativo fornecer um valor para a propriedade antes de salvar no banco de dados. Observe que isso ainda não desabilitará a geração de valores padrão no lado do servidor, portanto, usos não relacionados ao EF ainda podem obter um valor gerado. Para desabilitar completamente a geração de valor, altere o tipo de coluna de INTEGER para INT.