System.Data.Sqlite 1.0.99 引导比较不起作用
Posted
技术标签:
【中文标题】System.Data.Sqlite 1.0.99 引导比较不起作用【英文标题】:System.Data.Sqlite 1.0.99 guid comparison doesn't work 【发布时间】:2016-05-04 05:45:25 【问题描述】:我正在使用 C# 中的 System.Data.Sqlite 1.0.99,您可以使用它调用 EF 的 db。我在通过Guid
选择FirstOrDefault
时遇到了这个问题,它返回null
(但是数据库中存在具有这种guid 的行):
var user = context.Users.FirstOrDefault(x => x.Id == userId); //returns null
//or
var user = context.Users.Where(x => x.Id == userId).ToArray(); //returns empty array
发现一些信息表明这是已知问题并在 1.0.95 中修复,但在 1.0.97 和接下来的两个解决方案中再次损坏:
解决方案 1:将连接字符串上的 BinaryGUID 属性设置为 true:
Data Source=...;BinaryGUID=True;
解决方案 2:设置下一个环境变量(在建立连接之前):
Environment.SetEnvironmentVariable("AppendManifestToken_SQLiteProviderManifest", ";BinaryGUID=True;");
解决方案 2 有效,因为(来自 sqlite 网站):
AppendManifestToken_SQLiteProviderManifest - 如果此环境变量设置为 [任何内容],System.Data.SQLite.Linq.SQLiteProviderManifest 类(以及 System. Data.SQLite.EF6.SQLiteProviderManifest 类)通过将环境变量的值附加到现有的提供者清单标记(如果有)来修改未来的提供者清单标记。通常,为了使构造的提供者清单标记在语法上正确,[待附加] 环境变量值必须以分号开头。
解决方案 1 对我不起作用,因为据我了解,它仅对 System.Data.SQLite.Linq.SQLiteProviderManifest 有影响。
问题:是否有任何解决方案可以解决此问题而不是设置环境变量?
【问题讨论】:
我确认这仍然是 System.Data.SQLite v1.0.104.0 的问题。解决方案 1 不起作用,解决方案 2 起作用。在我的 Entity 对象的部分类的构造函数中添加这一行确实有效,谢谢!如果您确实找到了其他解决方案,请发布,但现在已经足够了。 我很高兴我的问题/解决方案很有帮助。感谢您的回复! 【参考方案1】:您会尝试使用 SingleorDefault 代替 FirstorDefault 吗? LINQ: When to use SingleOrDefault vs. FirstOrDefault() with filtering criteria
示例:var user = context.Users.SingleorDefault(x => x.Id == userId);
【讨论】:
以上是关于System.Data.Sqlite 1.0.99 引导比较不起作用的主要内容,如果未能解决你的问题,请参考以下文章
C# 引入Sqlite 未能加载文件或程序集“System.Data.SQLite
使用 System.Data.SQLite 和 C# 检索 BLOB