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

时间:2014-12-03 18:37:57

标签: c# entity-framework sqlite entity-framework-6 system.data.sqlite

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

问题是我无法找到有关SQLite实体框架提供程序如何处理Guids的任何文档。网络搜索也找不到对我有用的东西。关于在SQLite中使用Entity Framework的问题。

有人能指出我的文档,或者告诉我如何通过EF6模型在SQLite数据库中使用Guids?

2 个答案:

答案 0 :(得分:11)

看来这已经在1.0.95中得到了解决,但在1.0.97再次被打破。解决方案是将连接字符串上的BinaryGUID属性设置为true并设置以下环境变量(在建立连接之前)

Environment.SetEnvironmentVariable( “AppendManifestToken_SQLiteProviderManifest”, “; BinaryGUID =真;”);

数据源= c:\ mydb.db;版本= 3; BinaryGUID = True;

https://www.connectionstrings.com/sqlite/

答案 1 :(得分:3)

我终于得到了这个问题的答案。

我的问题是SQLite Entity Framework 6提供程序无法正确处理代码中的文字Guid。也就是说,形式为

的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"

这是错误的,因为存储在列中的值是一个字节数组。

根据this problem report on the SQLite site,结果发现SQLite团队认为这是提供程序中的错误,他们正在努力在1.0.95.0版本中修复它。我不知道什么时候会发布,但至少他们认为这是一个问题并且要解决它。