0

我正在使用 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 类型。

有任何想法吗?

4

1 回答 1

0

您可以尝试以下方法:

如果可能,请将参数类型设置为 DbObject。这将使 Npgsql 不使用强制转换,这可能会使其像您的原始代码一样工作。

我希望它有所帮助。

于 2009-09-02T21:56:30.423 回答