GuidをIDカラムとして使用するようにNHibernateエンティティ/マッピングを定義すると、例外が発生します。 Guid列はvarchar(40)として生成されますが、内容はバイナリのようです。NHibernateのIdカラムとしてGuidを使用すると、MySQLを使用するときにフォーマット例外が発生します
解決方法はありますか?今のところ、私はただのplain 'intを使っていますが、将来のプロジェクトについて知っておくといいでしょう! :)
GuidをIDカラムとして使用するようにNHibernateエンティティ/マッピングを定義すると、例外が発生します。 Guid列はvarchar(40)として生成されますが、内容はバイナリのようです。NHibernateのIdカラムとしてGuidを使用すると、MySQLを使用するときにフォーマット例外が発生します
解決方法はありますか?今のところ、私はただのplain 'intを使っていますが、将来のプロジェクトについて知っておくといいでしょう! :)
のMySQLコネクタのドキュメントは、.NETコネクタのバージョン5.2から、彼らはBINARY(16)ないVARCHAR(40)としてGUID年代を扱うと述べています。
のNHibernateの現在のMySQLの方言は、この変更を反映するように更新されませんので(実際にan issueが用意されて) は手動でスキーマを生成 NHibernateの後BINARY(16)にこれらの のフィールドを変換する必要があります。これに
私はここ数日で同じことをしてきました。これは本当の命の恩人です。 –
別のアップデート、最新のコネクタは、CHAR(36)
を使用このオプションは、Connector/NETの6.1.1で導入されたということです。 GUID型のバックエンド表現がBINARY(16)からCHAR(36)に変更されました。これは、開発者がサーバー関数UUID()を使用してGUID表を生成できるようにするために行われました.UUID()は36文字の文字列を生成します。古いアプリケーションの開発者は、データ型BINARY(16)のGUIDを使用するために、接続文字列に 'Old Guids = true'を追加できます。
例外は何ですか?列をvarchar(40)として作成したか、Hibernateでスキーマを生成しましたか? –
NHibernateがそれを生成しました。今は例外がありませんが、フォーマットに関しては例外です。 – l3dx