PostgresからMySQLに移植しているアプリケーションがあります。理由は気にしないでください。アプリケーションはEntityFramework4を使用してデータベースにクエリを実行します。
さまざまな理由から、Guids
C#コードで使用し、データベースに保存してから、保存されたの値に基づいてデータをクエリする必要がありますGuids
。私はMySQLと、本質的にブロブであるものをMySQLがどのように処理するかについてあまり詳しくありません。
まず、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` )
);
EntityFrameworkのコードは次のとおりです。
var g = ( from r in context.MyTable
where r.guid = id
select r ).Single();
EntityFrameworkによって生成されるクエリは次のとおりです。
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#コードで「シーケンスに要素が含まれていません」という例外がスローされます。
これを機能させるにはどうすればよいですか?