ASP.net MVC、NPgsql、およびPostgreSQLをデータベースとして使用するNHibernateを使用してWebアプリケーションを作成しています(VBを使用しています...私の選択ではありません)。
テーブルの 1 つには、inet 型の列が 2 つあります。マッピングファイルでは、文字列としてマッピングしてみました。行を更新する必要があるまで、これは実際にはうまくいきました。
次のエラー メッセージが表示されます。「列"mycolumn" は inet 型ですが、式はテキスト型です。
私は、Npgsql が IPAddress オブジェクトまたは NpgsqlInet オブジェクトのいずれかを必要としていることに気付きました。NpgsqlInet オブジェクトには文字列を受け入れるコンストラクターがあるため、次の手順に従ってカスタム ユーザー タイプを作成しようとしました。
http://intellect.dk/post/Implementing-custom-types-in-nHibernate.aspx
取得はうまくいきます:
Public Function NullSafeGet(ByVal rs As System.Data.IDataReader, ByVal names() As String, ByVal owner As Object) As Object Implements NHibernate.UserTypes.IUserType.NullSafeGet
Dim ip As NpgsqlInet = New NpgsqlInet(CType(NHibernateUtil.String.NullSafeGet(rs, names(0)), String))
Return ip
End Function
ご覧のとおり、データベースから文字列として取得し、それをコンストラクターのパラメーターとして使用します。
しかし、NullSafeSet メソッドに行き詰まっています。Npgsql はオブジェクトを NpgsqlInet 型として必要とするため、NHibernateUtil.String.NullSafeSet メソッドを使用できません。
何か案は?