我正在使用EF扩展来执行BulkSaveChanges
,并且正在使用SQLite,一切运行正常,可以快速保存等。我遇到的问题是,在保存Guid时,就好像{{ 1}}是先将Guid转换为TEXT,然后再保存,但数据类型为BLOB,然后通过DbContext从数据库中检索时,GUID无法识别,我的理论是因为数据已转换并且数据类型为事实是BLOB,EF,无法将其隐式转换回Guid。
此外,当使用EF的BulkSaveChanges
时,所有内容均被保留,恢复也可以,但是.SaveChanges
速度很慢。
任何帮助将不胜感激。
这是扩展名的链接:https://entityframework-extensions.net/bulk-savechanges
以下是使用.SaveChanges与.BulkSaveChanges保存数据的屏幕截图
保存为.SaveChanges:
保存为.BulkSaveChanges:
答案 0 :(得分:1)
考虑到以下情况,我能够使事情正常运行并能够在这种情况下生存:
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的数据类型:
然后添加以下行: