title: NHibernate: IUserType not working
body: <p>I have this class that implements IUserType:</p>
  
  <pre><code>public class StringToIntType : IUserType
      {
          /// &lt;summary&gt;
          /// mutable object = an object whose state CAN be modified after it is created
          /// &lt;/summary&gt;
          public bool IsMutable
          {
              get { return false; }
          }
  
          public Type ReturnedType
          {
              get { return typeof(StringToIntType); }
          }
  
          public SqlType[] SqlTypes
          {
              get { return new[] { NHibernateUtil.String.SqlType }; }
          }
  
          public object NullSafeGet(IDataReader rs, string[] names, object owner)
          {
              var obj = NHibernateUtil.String.NullSafeGet(rs, names[0]);
  
              if (obj == null) return null;
  
              var s = (string)obj;
  
              int i;
              if (Int32.TryParse(s, out i))
                  return i;
              return -1;
          }
  
          public void NullSafeSet(IDbCommand cmd, object value, int index)
          {
              if (value == null)
              {
                  ((IDataParameter)cmd.Parameters[index]).Value = DBNull.Value;
              }
              else
              {
                  var i = (int)value;
                  ((IDataParameter)cmd.Parameters[index]).Value = i.ToString();
              }
          }
  
          public object DeepCopy(object value)
          {
              return value;
          }
  
          public object Replace(object original, object target, object owner)
          {
              return original;
          }
  
          public object Assemble(object cached, object owner)
          {
              return cached;
          }
  
          public object Disassemble(object value)
          {
              return value;
          }
  
          public new bool Equals(object x, object y)
          {
              if (ReferenceEquals(x, y)) return true;
  
              if (x == null || y == null) return false;
  
              return x.Equals(y);
          }
  
          public int GetHashCode(object x)
          {
              return x == null ? typeof(int).GetHashCode() + 473 : x.GetHashCode();
          }
      }
  </code></pre>
  
  <p>My mapping:</p>
  
  <pre><code>public BarausLangMap()
          {
              Table("BARAUSLANG");
  
              Id(x =&gt; x.ula).CustomType&lt;StringToIntType&gt;();
  
              Map(x =&gt; x.bezeichnung);
              Map(x =&gt; x.sprache);
              Map(x =&gt; x.la);
              Where("la = 'SPE'");
          }
  </code></pre>
  
  <p>My properties:</p>
  
  <pre><code>    public virtual int ula { get; set; }
      public virtual String bezeichnung { get; set; }
      public virtual Int32? sprache { get; set; }
      public virtual String la { get; set; }
  </code></pre>
  
  <p>Problem: When I do</p>
  
  <pre><code>var b = session.Get&lt;BarausLang&gt;(5);
  </code></pre>
  
  <p>It says</p>
  
  <pre><code>{NHibernate.TypeMismatchException: Provided id of the wrong type.
  Expected: MobileServiceServer.Models.StringToIntType, got System.Int32
  </code></pre>
  
  <p>What is the problem? I thought nHibernate would call StringToIntType implicitely to convert from int to string and vice versa. I think that is the whole point. I thought StringToIntType was only for the mapping? How should I use it then?</p>