2009-09-02 7 views
0

J'écris une application web en utilisant ASP.net MVC, NPgsql et NHibernate avec PostgreSQL comme base de données (en utilisant VB ... pas mon choix).NHibernate, Npgsql, et le type inet

L'une des tables comporte deux colonnes de type inet. Dans le fichier de mappage, j'ai essayé de le mapper en tant que chaîne. Cela a vraiment bien fonctionné jusqu'à ce que je devais mettre à jour une rangée.

Je reçois un message d'erreur: "colonne "mycolumn" est de type iNet, mais l'expression est de type texte."

j'ai réalisé que Npgsql veut soit un objet IPAddress ou un objet NpgsqlInet. L'objet NpgsqlInet a un constructeur qui accepte une chaîne, donc j'ai essayé de créer un type d'utilisateur personnalisé suivant les instructions suivantes:

http://intellect.dk/post/Implementing-custom-types-in-nHibernate.aspx

Le get fonctionne très bien:

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 

Comme vous pouvez le voir, Je le tire de la base de données en tant que chaîne et l'utilise comme paramètre du constructeur.

Mais je suis coincé sur la méthode NullSafeSet. Je ne peux pas utiliser la méthode NHibernateUtil.String.NullSafeSet parce que Npgsql veut l'objet en tant que type NpgsqlInet.

Des idées?

Répondre

0

Vous pouvez essayer les éléments suivants:

Si possible, définissez votre type de paramètre à dbobject. Cela empêchera Npgsql d'utiliser des conversions qui fonctionneront probablement comme votre code original fonctionnait.

J'espère que ça aide.