Ton*_*ile 13 c# sqlite entity-framework system.data.sqlite entity-framework-6
我将我们产品的数据库从另一个支持Guids的产品移植到SQLite.众所周知,SQLite不支持Guids.我已经从我的数据库(数据库优先)创建了一个实体框架6模型,我需要从C#构建一个查询,将Guid与从代码传递的Guid进行比较.
问题是我找不到任何关于SQLite实体框架提供程序如何处理Guids的文档.网络搜索也找不到对我有用的东西.关于在SQLite中使用Entity Framework的问题.
任何人都可以指向我的文档,或者告诉我如何通过EF6模型在SQLite数据库中使用Guids?
Gre*_*reg 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/
这个问题我终于有了答案。
我的问题是 SQLite Entity Framework 6 提供程序无法正确处理将代码中的文字 Guid 转换为 SQL。即,以下形式的 Linq 表达式
context.MyEntity.Where( x => x.GuidColumn == new Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx") )
Run Code Online (Sandbox Code Playgroud)
转换为以下 SQL:
SELECT GuidColumn, Column1, Column2, . . . Column n
FROM MyEntity AS Extent1
WHERE Extent1.GuidColumn = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Run Code Online (Sandbox Code Playgroud)
这是错误的,因为存储在列中的值是字节数组。
根据SQLite 网站上的这个问题报告,事实证明 SQLite 团队认为这是提供程序中的一个错误,他们正在努力在 1.0.95.0 版本中修复它。我不知道什么时候会发布,但至少他们认识到这是一个问题并且会解决它。
归档时间: |
|
查看次数: |
3170 次 |
最近记录: |