オラクルでEF 4を使用しています。GUID を含む RAW 列を持つテーブルがあります。これらの GUID は、私が制御できないプロセスによって SQL サーバー データベースからインポートされます。
私の問題は、単純に EF を使用してエンティティに GUID プロパティを作成すると、GUID の最初の 3 つの部分が、SQL サーバーとの .net インターフェースが期待するものとは逆のエンディアンで出力されることです。したがって、ガイドはもう一致しません。
説明のために、これはガイドがどのように見えるかです:
Oracle: B0EFF3431D460639E04010AC1D044ED2
Sql Server: B0EFF343-1D46-0639-E040-10AC1D044ED2
Entity Guid property: {43f3efb0-461d-3906-e040-10ac1d044ed2}
これが発生する理由を理解しており、回避策として、次のようにエンディアンを変換する新しいプロパティをエンティティに追加しました。
byte[] bigEndianGuidArray = EfGeneratedGuidProperty.ToByteArray();
string guidString = BitConverter.ToString(bigEndianGuidArray, 0).Replace("-", string.Empty);
return new Guid(guidString);
これは機能しますが、この raw -> EF 経由の GUID -> バイト配列 -> 文字列 -> 文字列置換 -> GUID 変換を行うことはあまり合理的ではないようです。
より良い方法はありますか?理想的には、何らかの方法でEFに変換を正しく行うように指示するだけです。