我将我们产品的数据库从另一个支持Guids的产品移植到SQLite。众所周知,SQLite不支持Guids。我已经从我的数据库(数据库优先)创建了一个实体框架6模型,我需要从C#构建一个查询,将Guid与从代码传递的Guid进行比较。
问题是我找不到任何关于SQLite实体框架提供程序如何处理Guids的文档。网络搜索也找不到对我有用的东西。关于在SQLite中使用Entity Framework的问题。
任何人都可以指向我的文档,或者告诉我如何通过EF6模型在SQLite数据库中使用Guids?
似乎这在1.0.95中得到了解决,但在1.0.97再次被打破。解决方案是将连接字符串上的BinaryGUID属性设置为true并设置以下环境变量(在建立连接之前)
Environment.SetEnvironmentVariable( “AppendManifestToken_SQLiteProviderManifest”, “; BinaryGUID =真;”);
数据源= c:\ mydb.db;版本= 3; BinaryGUID = True;
https://www.connectionstrings.com/sqlite/
我终于得到了这个问题的答案。
我的问题是SQLite Entity Framework 6提供程序不能正确处理代码中的文字Guids到SQL。也就是说,形式的Linq表达式
context.MyEntity.Where( x => x.GuidColumn == new Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx") )
获取转换为以下SQL:
SELECT GuidColumn, Column1, Column2, . . . Column n
FROM MyEntity AS Extent1
WHERE Extent1.GuidColumn = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
这是错误的,因为存储在列中的值是一个字节数组。
根据 关于SQLite站点的这个问题报告事实证明,SQLite团队认为这是提供程序中的一个错误,他们正在努力在1.0.95.0版本中修复它。我不知道什么时候会发布,但至少他们认为这是一个问题并且要解决它。