SQLite Entity Framework 6提供程序如何处理Guids?

我将我们产品的数据库从另一个支持Guids的产品移植到SQLite。 众所周知,SQLite不支持Guids。 我已经从我的数据库(数据库优先)创建了一个entity framework6模型,我需要从C#构建一个查询,将Guid与从代码传递的Guid进行比较。

问题是我找不到任何关于SQLiteentity framework提供程序如何处理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。 也就是说,forms的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版本中修复它。 我不知道什么时候会发布,但至少他们认为这是一个问题并且要解决它。