我正在使用EF扩展来做BulkSaveChanges
,我正在使用SQLite,一切都运行良好,快速保存等等。我遇到的问题是,当保存Guids时,就好像BulkSaveChanges
正在将Guids转换为TEXT之前保存,但数据类型是BLOB,然后当通过DbContext从数据库中检索时,GUID是无法识别的,我的理论是因为数据被转换而且数据类型是BLOB,EF的事实无法将其转换回来隐含地向Guids说。
此外,当使用EF的.SaveChanges
时,一切都被保留,检索也没问题,但是.SaveChanges
很慢。
任何帮助将不胜感激。
所以这里是扩展名的链接:https://entityframework-extensions.net/bulk-savechanges
以下是使用.SaveChanges与.BulkSaveChanges保存的数据截图
使用.SaveChanges保存:
使用.BulkSaveChanges保存:
考虑到:我能够让事情变得有效并能够适应这种情况:
BulkSaveChanges
转换或者我应该说在数据持久之前纠正数据,在这种情况下将其转换为TEXT。但问题是数据类型仍然是BLOB,然后当通过EFCore检索时,隐式转换回GUID将不起作用。
在分析了这种情况后,我意识到为什么我不能只为GUXT定义GUID的数据类型?因为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数据类型:
然后添加这些行: