2009-06-23 5 views
5

GuidをIDカラムとして使用するようにNHibernateエンティティ/マッピングを定義すると、例外が発生します。 Guid列はvarchar(40)として生成されますが、内容はバイナリのようです。NHibernateのIdカラムとしてGuidを使用すると、MySQLを使用するときにフォーマット例外が発生します

解決方法はありますか?今のところ、私はただのplain 'intを使っていますが、将来のプロジェクトについて知っておくといいでしょう! :)

+0

例外は何ですか?列をvarchar(40)として作成したか、Hibernateでスキーマを生成しましたか? –

+0

NHibernateがそれを生成しました。今は例外がありませんが、フォーマットに関しては例外です。 – l3dx

答えて

7

のMySQLコネクタのドキュメントは、.NETコネクタのバージョン5.2から、彼らはBINARY(16)ないVARCHAR(40)としてGUID年代を扱うと述べています。

のNHibernateの現在のMySQLの方言は、この変更を反映するように更新されませんので(実際にan issueが用意されて) は手動でスキーマを生成 NHibernateの後BINARY(16)にこれらの のフィールドを変換する必要があります。これに

+0

私はここ数日で同じことをしてきました。これは本当の命の恩人です。 –

5

別のアップデート、最新のコネクタは、CHAR(36)

を使用このオプションは、Connector/NETの6.1.1で導入されたということです。 GUID型のバックエンド表現がBINARY(16)からCHAR(36)に変更されました。これは、開発者がサーバー関数UUID()を使用してGUID表を生成できるようにするために行われました.UUID()は36文字の文字列を生成します。古いアプリケーションの開発者は、データ型BINARY(16)のGUIDを使用するために、接続文字列に 'Old Guids = true'を追加できます。

関連する問題