I Found It!

I am in idiot and declared my array like so:

Dim types(1) As NHibernate.SqlTypes.SqlType
            types(0) = New SqlTypes.SqlType(DbType.Int16)
            Return types

thinking that (1) was the size of the array, when in fact it is the upper
dimension.  so. changing that 1 to a 0 fixed the problem.

*sigh*

hopefully this saves someone else from wasting as much time as i have.

Patricia

On Wed, May 27, 2009 at 10:07 AM, Patricia Vandermeer <
[email protected]> wrote:

> Hi Fabio,
>
> Thanks for the Tip.  I've tried to impliment a usertype but I am getting
> the *"property mapping has wrong number of columns:
> VolunteerImpact.Domain.UserInfo.GenderID type: GenderIdType"*
> error that I was having with my other attempt at a user type (that i ended
> up using a listener for(Thanks to your advice, it works great!).
>
>
> It occurs on the config.buildsession
>
> Here is the relevant mapping line:
> <property name="GenderId" column="GenderID" access="property"
> type="VolunteerImpact.Data.GenderIdType, VolunteerImpact.Data" />
>
> Here is the User Type Code:
> Imports NHibernate.UserTypes
> Imports NHibernate
> Imports VolunteerImpact.Common
>
>
>
> Public Class GenderIdType
>     Implements IUserType
>
>     Public ReadOnly Property IsMutable() As Boolean Implements
> NHibernate.UserTypes.IUserType.IsMutable
>         Get
>             Return False
>         End Get
>     End Property
>
>     Public ReadOnly Property ReturnedType() As System.Type Implements
> IUserType.ReturnedType
>         Get
>             Return GetType(GenderIdType)
>         End Get
>     End Property
>
>     Public ReadOnly Property SqlTypes() As NHibernate.SqlTypes.SqlType()
> Implements IUserType.SqlTypes
>         Get
>             Dim types(1) As NHibernate.SqlTypes.SqlType
>             types(0) = New SqlTypes.SqlType(DbType.Int16)
>             Return types
>             ' Return New () {NHibernateUtil.[String].SqlType}
>         End Get
>     End Property
>
>     Public Function NullSafeGet(ByVal rs As IDataReader, ByVal names As
> String(), ByVal owner As Object) As Object Implements IUserType.NullSafeGet
>         Dim obj As Object = NHibernateUtil.[String].NullSafeGet(rs,
> names(0))
>
>         If obj Is Nothing Then
>             Return Nothing
>         End If
>
>         Dim gender As Integer? = DirectCast(obj, Integer?)
>
>         If gender.HasValue = False AndAlso gender <> 1 AndAlso gender <> 2
> Then
>             Throw New Exception("Invalid GenderID")
>         Else
>             Select Case gender
>                 Case 1
>                     Return GenderIdEnum.Male
>                 Case 2
>                     Return GenderIdEnum.Female
>                 Case Else
>                     Return GenderIdEnum.NotSpecified
>
>             End Select
>
>         End If
>     End Function
>
>     Public Sub NullSafeSet(ByVal cmd As IDbCommand, ByVal value As Object,
> ByVal index As Integer) Implements IUserType.NullSafeSet
>         Dim gender As GenderIdEnum
>         gender = DirectCast(value, GenderIdEnum)
>
>         Select Case gender
>             Case GenderIdEnum.NotSpecified
>                 DirectCast(cmd.Parameters(index), IDataParameter).Value =
> DBNull.Value
>             Case GenderIdEnum.Male
>                 DirectCast(cmd.Parameters(index), IDataParameter).Value = 1
>             Case GenderIdEnum.Female
>                 DirectCast(cmd.Parameters(index), IDataParameter).Value = 2
>         End Select
>
>     End Sub
>
>     Public Function DeepCopy(ByVal value As Object) As Object Implements
> IUserType.DeepCopy
>         Return value
>     End Function
>
>     Public Function Replace(ByVal original As Object, ByVal target As
> Object, ByVal owner As Object) As Object Implements IUserType.Replace
>         Return original
>     End Function
>
>     Public Function Assemble(ByVal cached As Object, ByVal owner As Object)
> As Object Implements IUserType.Assemble
>         Return cached
>     End Function
>
>     Public Function Disassemble(ByVal value As Object) As Object Implements
> IUserType.Disassemble
>         Return value
>     End Function
>
>     Public Shadows Function Equals(ByVal x As Object, ByVal y As Object) As
> Boolean Implements IUserType.Equals
>         If ReferenceEquals(x, y) Then
>             Return True
>         End If
>
>         If x Is Nothing OrElse y Is Nothing Then
>             Return False
>         End If
>
>         Return x.Equals(y)
>     End Function
>
>     Public Shadows Function GetHashCode(ByVal x As Object) As Integer
> Implements IUserType.GetHashCode
>         Return If(x Is Nothing, GetType(Boolean).GetHashCode() + 473,
> x.GetHashCode())
>     End Function
>
>
> End Class
>
>
>
> Here is the property in the class:
>
> Private _GenderId As GenderIdEnum
>  Public Overridable Property GenderId() As GenderIdEnum
>         Get
>             Return _GenderId
>         End Get
>         Set(ByVal value As GenderIdEnum)
>             _GenderId = value
>         End Set
>     End Property
>
>
> and here is the enum
> Public Enum GenderIdEnum
>     NotSpecified
>     Male = 1
>     Female = 2
> End Enum
>
>
> any help( from anyone) in pin pointing where the error is occurring would
> be greatly appreciated!
>
> Thanks very Much,
> Patricia
>
>
> On Mon, May 25, 2009 at 4:35 PM, Fabio Maulo <[email protected]> wrote:
>
>> custom implementation of IUserType
>>
>> 2009/5/25 Patricia Vandermeer <[email protected]>
>>
>> Hi Everyone,
>>>
>>> here's the situation.   We've got a bunch of fields that are enums,  that
>>> can be null.  For example:
>>>
>>> a user has a gender that is stored in a nullable column (it's a FK to a
>>> Gender Table) and is represented in the application as an enum like so:
>>>
>>> GenderEnum
>>> NotSpecified
>>> Male 1
>>> Female 2
>>>
>>> What we would like to do is have it put NULL in the database if it is Not
>>> Specified.  and If it's NULL in the database have it set the field to
>>> NotSpecified.
>>>
>>> I tried making the enum nullable and setting notSpecified = nothing
>>>
>>> but then when i try to use the enum  it doesn't work properly.
>>>
>>> we are working with a pre-existing database and code base that we are
>>> upgrading, and the less code that we have to mangle the better.
>>>
>>> any suggestions on the best way to implement this scenario?
>>>
>>> Thanks in Advanced
>>>
>>> Patricia
>>>
>>>
>>>
>>>
>>
>>
>> --
>> Fabio Maulo
>>
>> >>
>>
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to