2009-06-23 31 views
5

當我定義NHibernate實體/映射使用Guid作爲標識列時,我收到一個異常。 Guid列生成爲varchar(40),但內容似乎是二進制的。使用Guid作爲NHibernate中的Id列導致格式異常使用MySQL時

有沒有解決方案?現在我只是使用普通的ol'int,但很高興知道未來的項目! :)

+0

什麼是例外?你創建了列作爲varchar(40)還是NHibernate生成架構? – 2009-06-23 21:30:09

+0

NHibernate生成它。我現在沒有例外情況,但這是格式方面的例外情況。 – l3dx 2009-06-29 10:43:42

回答

7

MySQL連接文件指出從.net連接器的版本5.2他們對待GUID的爲BINARY(16)沒有VARCHAR(40)

由於NHibernate的當前MySQL的方言不更新,以反映NHibernate的 後這種變化(實際上an issue準備) 你需要這些 領域手動轉換爲二進制(16)生成的模式。

5

另一個更新這是最新的連接器使用CHAR(36)

該選項在連接器/ NET 6.1.1介紹。 GUID類型的後端表示已從BINARY(16)更改爲CHAR(36)。這是爲了允許開發人員使用服務器函數UUID()來填充GUID表--UUID()生成一個36個字符的字符串。舊應用程序的開發人員可以將「Old Guids = true」添加到連接字符串中,以便使用數據類型BINARY(16)的GUID。

相關問題