0

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 メソッドを使用できません。

何か案は?

4

1 に答える 1

0

次のことを試してみてください。

可能であれば、パラメーターの型を DbObject に設定してください。これにより、Npgsql はキャストを使用しなくなり、元のコードが機能していたように機能するようになります。

お役に立てば幸いです。

于 2009-09-02T21:56:30.423 に答える