Мне удалось заставить все работать и жить в этой ситуации, учитывая:
- То, что SQLite не поддерживает GUID, и дает тип данных BLOB для данных, которые он не может распознать.
- То, что
BulkSaveChanges
преобразует или я должен сказать исправляет данные до того, как они сохранятся, в этом случае преобразует их в ТЕКСТ.
Проблема, однако, заключается в том, чтотип данных остается BLOB, поэтому при получении через EFCore обратное преобразование в GUID не будет работать.
После анализа ситуации я понял, почему я не могу просто определить тип данных GUID для TEXT?так как BulkSaveChanges
делает преобразование в ТЕКСТ в любом случае.Таким образом, 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 до:
![enter image description here](https://i.stack.imgur.com/aTqBi.png)
Затем после добавления этих строк:
![enter image description here](https://i.stack.imgur.com/ZUAdn.png)