我有一个定义为
的表CREATE TABLE "Test1"
(
ID Char(16) CHARACTER SET OCTETS NOT NULL,
"StartedAt" Timestamp NOT NULL,
CONSTRAINT "PK_Test1" PRIMARY KEY (ID)
);
我插入带有GUID作为ID的记录。我使用Entitiy Framework 6来读取和插入记录。
当我使用以下LINQ代码从表中获取数据时,我什么都没得到:
var dbData = repo.Select(record => parentSource.Contains(record.ID))
.OrderBy(record => record.TimeStamp);
parentSource是一个List< Guid>并包含一些指导。 repo是我的数据库上下文。当我看一下生成的SQL时,我得到了这个:
SELECT
"B"."ID" AS "ID",
"B"."StartedAt" AS "StartedAt",
FROM "Test1" AS "B"
WHERE "B"."ID" IN (CHAR_TO_UUID('60c78366-e6d2-4cba-b830-27ad0e4d06f2'),CHAR_TO_UUID('dbfa36ed-ec81-4914-ad70-4a0dd0677fdd'))
你可以看到我在表中搜索了两个guid,并且表中都存在两个guid。但他们没有找到。当我比较CHAR_TO_UUID函数的输出时,我获得了与插入记录时在ID列中生成的值不同的值。 那么,如何使这段代码工作?
EDIT1: Firebird数据库是2.5 .net提供商是4.0
表
中列ID的值ed36fadb81ec1449ad704a0dd0677fdd
6683c760d2e6ba4cb83027ad0e4d06f2
char_to_uuid的输出是
dbfa36edec814914ad704a0dd0677fdd
60c78366e6d24cbab83027ad0e4d06f2
两个guid是相同的,所以应该通过上面的linq代码找到它们。我可以看到,guids部分相同。前4个字节的顺序相反,接下来的2个2字节也是如此。