我将 EF 4 与 oracle 一起使用。我有一个包含 guid 的 RAW 列的表。这些 guid 是由我无法控制的某个进程从 sql server db 导入的。
我的问题是,如果我只是使用 EF 在我的实体中创建一个 guid 属性,则 guid 的前 3 部分会出现与 .net 与 SQL Server 接口所期望的字节序相反的字节序。因此,指南不再匹配。
为了说明,这就是 Guid 的样子:
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);
这行得通,但对我来说,通过 EF 执行原始 -> guid -> 字节数组 -> 字符串 -> 字符串替换 -> guid 转换似乎不太合理。
有没有更好的办法?理想情况下,简单地告诉 EF 以某种方式为我正确地进行转换。