Entity Framework 扩展问题 .BulkSaveChanges - 保存 Guid
Problem with Entity Framework extensions .BulkSaveChanges - Saving Guid
我正在使用 EF 扩展来做 BulkSaveChanges
,并且我正在使用 SQLite,一切正常,保存速度快等。我遇到的问题是在保存 Guid 时,就好像BulkSaveChanges
是先把Guids转成TEXT再保存,但是数据类型是BLOB,然后通过DbContext从数据库中检索时,GUIDs是无法识别的,我的理论是因为数据被转换了,事实是数据类型为 BLOB、EF,无法将其隐式转换回 Guids。
此外,使用EF的.SaveChanges
时,一切都被保留,检索也可以,但是.SaveChanges
很慢。
任何帮助将不胜感激。
所以这是 link 的扩展名:https://entityframework-extensions.net/bulk-savechanges
这是使用 .SaveChanges 与 .BulkSaveChanges 保存数据的一些屏幕截图
使用 .SaveChanges 保存:
使用 .BulkSaveChanges 保存:
考虑到以下情况,我能够使事情正常进行并能够忍受这种情况:
- SQLite 不支持 GUID,它为无法识别的数据提供 BLOB 数据类型。
BulkSaveChanges
转换或者我应该说 更正 数据在持久化之前,在这种情况下将其转换为文本。
然而,问题是数据类型仍然是 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 的数据类型:
然后在添加这些行之后:
我正在使用 EF 扩展来做 BulkSaveChanges
,并且我正在使用 SQLite,一切正常,保存速度快等。我遇到的问题是在保存 Guid 时,就好像BulkSaveChanges
是先把Guids转成TEXT再保存,但是数据类型是BLOB,然后通过DbContext从数据库中检索时,GUIDs是无法识别的,我的理论是因为数据被转换了,事实是数据类型为 BLOB、EF,无法将其隐式转换回 Guids。
此外,使用EF的.SaveChanges
时,一切都被保留,检索也可以,但是.SaveChanges
很慢。
任何帮助将不胜感激。
所以这是 link 的扩展名:https://entityframework-extensions.net/bulk-savechanges
这是使用 .SaveChanges 与 .BulkSaveChanges 保存数据的一些屏幕截图
使用 .SaveChanges 保存:
使用 .BulkSaveChanges 保存:
考虑到以下情况,我能够使事情正常进行并能够忍受这种情况:
- SQLite 不支持 GUID,它为无法识别的数据提供 BLOB 数据类型。
BulkSaveChanges
转换或者我应该说 更正 数据在持久化之前,在这种情况下将其转换为文本。
然而,问题是数据类型仍然是 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 的数据类型:
然后在添加这些行之后: