C# 将谓词中的Guid与MySql.Data.Entity进行比较时,序列不包含任何元素

C# 将谓词中的Guid与MySql.Data.Entity进行比较时,序列不包含任何元素,c#,mysql,entity-framework,C#,Mysql,Entity Framework,我在MySQL中使用实体框架,每个表都有一个类型为CHAR(36)的ID列。在EDMX文件中,它们都是System.Guid类型,SSDL xml如下所示: <EntityType Name="Accounts"> <Key> <PropertyRef Name="ID" /> </Key> <Property Name="ID" Type="guid" Nullable="false" /> ... 我敢打赌

我在MySQL中使用实体框架,每个表都有一个类型为CHAR(36)的ID列。在EDMX文件中,它们都是System.Guid类型,SSDL xml如下所示:

<EntityType Name="Accounts">
  <Key>
    <PropertyRef Name="ID" />
  </Key>
  <Property Name="ID" Type="guid" Nullable="false" />
  ...

我敢打赌这是MySQL连接器中的一个bug,它与数据库中GUID的存储方式有关。出于某种原因,这种比较是行不通的。我认为应该使用二进制(16)而不是字符(36)


查看此问题的答案:

我敢打赌这是MySQL连接器中的一个错误,它与GUID在数据库中的存储方式有关。出于某种原因,这种比较是行不通的。我认为应该使用二进制(16)而不是字符(36)


查看此问题的答案:

尝试切换到
SingleOrDefault()
并检查
account
是否为
null
。如果您进入下一行,并且帐户为空,那么GUID不匹配。这与此问题无关。它当然会返回null,因为谓词失败。问题是它不应该这样做,因为ObjectSet确实包含两个结果,这两个结果正好有一个帐户具有匹配的ID。现在的问题是为什么谓词在这方面失败。此应用程序构建为支持MSSQL和MySQL,当配置为MSSQL时,代码可以正常工作。它是MySql特有的,但我不知道它为什么会失败。如果查看图片,您将看到匹配的结果集。请尝试切换到
SingleOrDefault()
并检查
account
中的
null
。如果您进入下一行,并且帐户为空,那么GUID不匹配。这与此问题无关。它当然会返回null,因为谓词失败。问题是它不应该这样做,因为ObjectSet确实包含两个结果,这两个结果正好有一个帐户具有匹配的ID。现在的问题是为什么谓词在这方面失败。此应用程序构建为支持MSSQL和MySQL,当配置为MSSQL时,代码可以正常工作。它是MySql特有的,但我不知道它为什么会失败。如果查看图片,您将看到匹配的结果集。确实没有足够的文档,但连接器有问题。确实没有足够的文档,但连接器有问题。
(method argument) accountID: 
{7767402f-9b29-4026-b40d-6eb991748f8c}
(should match) element in results view:
{7767402f-9b29-4026-b40d-6eb991748f8c}