Guid.Tostring() 在我的数据库中给出了与 UUID_TO_CHAR 不同的表示

Guid.Tostring() gives a different representation than UUID_TO_CHAR in my database

我正在使用以 UUID 作为主键的 Firebird 数据库,但我 运行 遇到了以下问题:

我的 C# 应用程序中同一 Guid 的文本表示与数据库中的不同。我在数据库中使用 UUID_TO_CHAR 函数获取文本表示,在我的 C# 应用程序中使用 Guid.ToString().

不同之处在于 Firebird 数据库解释 UUID 与 .net 框架的方式不同,我相信他们用 different byte ordering

来阅读它们

例如,数据库中的 guid 如下所示:

FADE3E40-6227-5B40-BBB9-8492859EBA66

我的 C# 应用程序中的相同 guid 如下所示:

403edefa-2762-405b-bbb9-8492859eba66

有没有一种方法可以像在 C# 中一样在我的数据库中显示它们。或者反之亦然?

有没有办法在从数据库中获取它们并将它们放入数据库时​​进行转换,这样我就不必在任何地方使用格式了?

要获得与 firebird 中相同的表示形式 - 将 guid 的所有字节原样转换为十六进制:

BitConverter.ToString(guid.ToByteArray()).Replace("-", "")

如有必要,您可以选择在组之间加上“-”,例如:

static class Extensions {
    public static string ToFirebirdString(this Guid guid) {
        var raw = BitConverter.ToString(guid.ToByteArray()).Replace("-", "");
        return $"{raw.Substring(0, 8)}-{raw.Substring(8, 4)}-{raw.Substring(12,4)}-{raw.Substring(16, 4)}-{raw.Substring(20)}";
    }
}