我正在使用 ASP.net MVC、NPgsql 和 NHibernate 和 PostgreSQL 作为数据库编写一个 Web 应用程序(使用 VB ......不是我的选择)。
其中一个表有两列 inet 类型。在映射文件中,我尝试将其映射为字符串。这实际上工作得很好,直到我不得不更新一行。
我收到一条错误消息:“列“mycolumn”的类型为inet,但表达式的类型为文本。 ”
我意识到 Npgsql 想要一个 IPAddress 对象或一个 NpgsqlInet 对象。NpgsqlInet 对象有一个接受字符串的构造函数,因此我尝试按照以下说明创建自定义用户类型:
http://intellect.dk/post/Implementing-custom-types-in-nHibernate.aspx
get 工作正常:
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 方法。我不能使用 NHibernateUtil.String.NullSafeSet 方法,因为 Npgsql 想要对象作为 NpgsqlInet 类型。
有任何想法吗?