我将我们产品的数据库从另一个支持Guids的产品移植到SQLite。众所周知,SQLite不支持Guids。我已经从我的数据库(数据库优先)创建了一个实体框架6模型,我需要从C#构建一个查询,将Guid与从代码传递的Guid进行比较。
问题是我无法找到有关SQLite实体框架提供程序如何处理Guids的任何文档。网络搜索也找不到对我有用的东西。关于在SQLite中使用Entity Framework的问题。
有人能指出我的文档,或者告诉我如何通过EF6模型在SQLite数据库中使用Guids?
答案 0 :(得分:11)
看来这已经在1.0.95中得到了解决,但在1.0.97再次被打破。解决方案是将连接字符串上的BinaryGUID属性设置为true并设置以下环境变量(在建立连接之前)
Environment.SetEnvironmentVariable( “AppendManifestToken_SQLiteProviderManifest”, “; BinaryGUID =真;”);
数据源= c:\ mydb.db;版本= 3; BinaryGUID = True;
答案 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版本中修复它。我不知道什么时候会发布,但至少他们认为这是一个问题并且要解决它。