我正在使用ASP.net MVC,NPgsql和NHibernate编写一个Web应用程序,使用PostgreSQL作为数据库(使用VB ...不是我的选择)。
其中一个表有两列带有inet类型的列。在映射文件中,我尝试将其映射为字符串。这实际上工作正常,直到我不得不更新一行。
我收到一条错误消息:“列”mycolumn“的类型为inet,但表达式的类型为text。”
我意识到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
如您所见,我将其作为String从数据库中提取出来,并将其用作构造函数的参数。
但是我陷入了NullSafeSet方法。我无法使用NHibernateUtil.String.NullSafeSet方法,因为Npgsql希望该对象为NpgsqlInet类型。
有什么想法吗?
答案 0 :(得分:0)
您可以尝试以下方法:
如果可能,请将参数类型设置为DbObject。这将使Npgsql不使用强制转换,这可能会使它在原始代码工作时起作用。
我希望它有所帮助。