Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Эта страница содержит сведения о конфигурации создания значений и шаблонах, относящихся к поставщику SQLite. Рекомендуется сначала прочитать общую страницу по генерации значений.
Столбцы "AUTOINCREMENT"
По соглашению числовые столбцы первичного ключа, настроенные на автоматическое создание значений при добавлении, конфигурируются с помощью функции AUTOINCREMENT SQLite. Начиная с EF Core 10, SQLite AUTOINCREMENT также можно включить или отключить с помощью конфигурации.
Настройка AUTOINCREMENT
По соглашению целочисленные первичные ключи автоматически настраиваются с помощью AUTOINCREMENT, если они не являются частью составного ключа и не имеют внешнего ключа. Однако может потребоваться явно настроить свойство для использования SQLite AUTOINCREMENT, если свойство имеет преобразование значений из типа, отличного от целочисленного типа, или при переопределении соглашений:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Id)
.HasConversion<int>()
.UseAutoincrement();
}
Отключение AUTOINCREMENT для создания значений SQLite по умолчанию
AUTOINCREMENT накладывает дополнительные затраты на ЦП, память, место на диск и операции ввода-вывода диска по сравнению с алгоритмом создания ключей по умолчанию в SQLite — ROWID.
ROWID Недостатком является то, что он повторно использует значения из удаленных строк. Если сценарий не будет затронут этим, вы можете отключить AUTOINCREMENT и использовать поведение создания значений по умолчанию SQLite. Это можно сделать с помощью API метаданных:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Id)
.Metadata.SetValueGenerationStrategy(SqliteValueGenerationStrategy.None);
}
Кроме того, можно настроить EF, чтобы не рассматривать свойство как созданное значение:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Id)
.ValueGeneratedNever();
}
Это означает, что приложение может предоставить значение свойства перед сохранением в базе данных. Обратите внимание, что это по-прежнему не отключает серверное создание значений по умолчанию, поэтому использование вне EF всё равно может получить сгенерированное значение. Чтобы полностью отключить создание значений, измените тип столбца на INTEGERINT.