我正在用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类型。
有什么想法吗?
发布于 2009-09-02 21:56:30
您可以尝试以下几种方法:
如果可能,将参数类型设置为DbObject。这将使Npgsql不使用强制转换,这可能会使其像原始代码一样工作。
希望能帮上忙。
https://stackoverflow.com/questions/1369931
复制相似问题