我有一个从 Postgres 移植到 MySQL 的应用程序。别管为什么。该应用程序使用 Entity Framework 4 来查询数据库。
由于各种原因,我不得不Guids
在我的 C# 代码中使用,将它们保存到数据库中,然后根据保存的Guids
. 我对 MySQL 以及它如何处理本质上是 blob 的东西不是很熟悉。
首先,MySQL 中没有 UUID 类型。我必须将它们保存为 BINARY(16) 值。好的。我已将列创建为 BINARY(16) 并将数据写入表中。好的。
我的问题是我看不到与 Guid 的存储值相匹配。我编写了一个单元测试,它Guid
使用表已知的数据写入数据,然后尝试检索它。数据很好地进入数据库,但是当我尝试读回它时,我没有得到任何行。
这是一个示例表架构:
CREATE TABLE `MyDatabase`.`MyTable` (
`id` INT NOT NULL AUTO_INCREMENT,
`guid` BINARY(16) NOT NULL,
`applicationId` INT(11) NOT NULL,
`name` VARCHAR(256) NOT NULL,
Description VARCHAR(256) NULL,
SessionTimeout INT NOT NULL,
DomainId INT NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT IX_aspnetx_groups UNIQUE ( `applicationId`, `id` )
);
这是实体框架代码:
var g = ( from r in context.MyTable
where r.guid = id
select r ).Single();
这是 Entity Framework 生成的查询:
SELECT
`Extent1`.`id`,
`Extent1`.`guid`,
`Extent1`.`applicationId`,
`Extent1`.`name`,
`Extent1`.`Description`,
`Extent1`.`SessionTimeout`,
`Extent1`.`DomainId`
FROM `aspnetx_groups` AS `Extent1`
WHERE `Extent1`.`guid` = '81d7de5e-4212-4ff8-b3d4-9f115261971d' LIMIT 2;
当它执行时,它不返回任何行,导致在我的 C# 代码中引发“序列不包含元素”异常。
我该如何进行这项工作?