2011-08-17 109 views
2

我正在使用实体框架和MySQL,并且每个表都有一个类型为CHAR(36)的ID列。在EDMX文件,他们都是类型的System.Guid,而SSDL XML的样子:当比较谓词中的Guid时,序列不包含任何元素与MySql.Data.Entity

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

当我尝试使用任何方法(单,凡在任何等),它抛出一个InvalidOperationException指出该序列不包含任何元素。这是奇怪的部分,如果我在调试器中展开结果视图,它确实显示了元素。 GUID值是相同的,所以它应该只返回一个元素。我在下面列出了一张图片(右击保存以查看大图),但任何人都可以解释这里发生了什么?该GUID我们做比赛:

(method argument) accountID: 
{7767402f-9b29-4026-b40d-6eb991748f8c} 
(should match) element in results view: 
{7767402f-9b29-4026-b40d-6eb991748f8c} 

enter image description here

+0

尝试切换到'的SingleOrDefault()'和'检查为account''null'。如果您到达下一行并且帐户为空,那么GUID不匹配。 –

+0

这与这个问题没有关系。它当然会返回null,因为谓词失败。问题在于它不应该这样做,因为ObjectSet确实包含两个只有一个帐户和匹配ID的结果。目前的问题是为什么谓词失败。这个应用程序是为支持MSSQL和MySQL而构建的,当配置为MSSQL时,代码可以正常工作。这是特定于MySql的,但我不知道它为什么失败。如果你看图片,你会看到匹配的结果集。 –

回答

0

我敢打赌,这是在MySQL连接器中的错误,并且它与GUID是如何存储在DB做。由于某些原因,比较不起作用。我认为你应该使用BINARY(16)而不是CHAR(36)。

检查出这个问题的答案:Storing MySQL GUID/UUIDs

+0

这里没有足够的文档,但这是连接器的问题。 –