System.Data.Sqlite 1.0.99 guid比较不起作用

Vas*_*nko 9 c# sqlite entity-framework guid

我正在使用C#的System.Data.Sqlite 1.0.99,你可以用EF调用db.我面临选择的问题时FirstOrDefault通过Guid它回到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
Run Code Online (Sandbox Code Playgroud)

找到一些已知问题的信息,它已在1.0.95修复,但在1.0.97和下两个解决方案中又被破坏:

解决方案1:将连接字符串上的BinaryGUID属性设置为true:

Data Source=...;BinaryGUID=True;
Run Code Online (Sandbox Code Playgroud)

解决方案2:设置下一个环境变量(在建立连接之前):

   Environment.SetEnvironmentVariable("AppendManifestToken_SQLiteProviderManifest", ";BinaryGUID=True;");
Run Code Online (Sandbox Code Playgroud)

解决方案2有效,因为(来自sqlite站点):

AppendManifestToken_SQLiteProviderManifest - 如果将此环境变量设置为[to anything],System.Data.SQLite.Linq.SQLiteProviderManifest类(以及System.Data.SQLite.EF6.SQLiteProviderManifest类)将使用它来修改将来的提供程序清单标记.将环境变量的值附加到现有提供程序清单标记(如果有).通常,为了使构造的提供者清单标记在语法上正确,环境变量值[要附加]必须以分号开头.

解决方案1对我不起作用,因为据我所知,它仅对System.Data.SQLite.Linq.SQLiteProviderManifest有影响.

问题:是否有任何解决方案可以解决此问题而不是设置环境变量?

小智 0

您会尝试使用 SingleorDefault 而不是 FirstorDefault 吗? LINQ:何时使用 SingleOrDefault 与 FirstOrDefault() 以及过滤条件

示例: var user = context.Users.SingleorDefault(x => x.Id == userId);