Я использую расширение EF для выполнения BulkSaveChanges
, и я использую SQLite, все работает отлично, быстрое сохранение и т. Д. У меня проблема в том, что при сохранении Guids, как будто BulkSaveChanges
конвертирует Guids в TEXT сохраняя, но тип данных - BLOB, затем при извлечении из базы данных через DbContext GUID не распознаются, моя теория состоит в том, что, поскольку данные преобразуются и тот факт, что тип данных BLOB, EF, не может преобразовать их обратно Руководству безоговорочно.
Более того, при использовании .SaveChanges
EF все сохраняется, поиск также в порядке, но .SaveChanges
медленный.
Любая помощь будет оценена.
Итак, вот ссылка на расширение: https://entityframework-extensions.net/bulk-savechanges
Вот несколько скриншотов данных, сохраняемых с .SaveChanges и .BulkSaveChanges
Сохранено с помощью .SaveChanges:
Сохранено с .BulkSaveChanges:
Я был в состоянии заставить вещи работать и мог жить в этой ситуации, учитывая:
BulkSaveChanges
преобразует или, я должен сказать, исправляет данные до того, как они сохранятся, в этом случае преобразует их в TEXT. Проблема, однако, заключается в том, что тип данных остается BLOB, поэтому при получении через EFCore обратное преобразование в GUID не будет работать.
Проанализировав ситуацию, я понял, почему я не могу просто определить тип данных GUID для TEXT? поскольку BulkSaveChanges
в любом случае выполняет преобразование в TEXT. И таким образом, EFCore сможет увидеть, что GUID сохраняются как TEXT, а не BLOB, так что он может знать, как неявно преобразовать его обратно в GUID. Оказалось, это возможно!
Вот что я сделал, я добавил эти строки, когда мы строим модель через Fluent API для сущностей, которые содержат GUID:
entityTypeBuilder
.Property(l => l.GUID)
.HasConversion<string>();
Построение модели выглядит примерно так:
public override void Build(ModelBuilder modelBuilder)
{
EntityTypeBuilder<Person> entityTypeBuilder =
modelBuilder.Entity<Person>();
entityTypeBuilder
.Property(l => l.GUID)
.HasConversion<string>();
}
Тип данных GUID перед:
Затем после того, как добавил эти строки: