1

直升机,映射两个int为DateTime

我试图创建两个“诠释”的地图存储在数据库中的日期时间一个用户类型。 我的'int's'在数据库中调用了时间和日期,以这种方式获得所需的效果。但我收到错误:指定的转换无效。

我的代码:

public class DateTimeUserType : ImmutableUserType 
    { 
     public override object NullSafeGet(IDataReader rs, string[] names, object owner) 
     { 
      var date = (int)NHibernateUtil.Int32.NullSafeGet(rs, names[0]); 
      var time = (int)NHibernateUtil.Int32.NullSafeGet(rs, names[1]); 
      return Converts.ConvertDateTimeFromInt(date, time); 
     } 

     public override void NullSafeSet(IDbCommand cmd, object value, int index) 
     { 
      var res = Converts.ConvertDateTimeToInt((DateTime)value); 
      NHibernateUtil.Int32.NullSafeSet(cmd, res.Date.GetValueOrDefault(), index); 
      NHibernateUtil.Int32.NullSafeSet(cmd, res.Time.GetValueOrDefault(), index + 1); 
     } 

     public override Type ReturnedType 
     { 
      get { return typeof(DateTime); } 
     } 

     public override SqlType[] SqlTypes 
     { 
      get { return new[] { SqlTypeFactory.Int32, SqlTypeFactory.Int32 }; } 
     } 
    } 

public abstract class ImmutableUserType : IUserType 
    { 
     public new virtual bool Equals(object x, object y) 
     { 
      return object.Equals(x, y); 
     } 

     public virtual int GetHashCode(object x) 
     { 
      return (x == null) ? 0 : x.GetHashCode(); 
     } 

     public bool IsMutable 
     { 
      get { return false; } 
     } 

     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 abstract object NullSafeGet(System.Data.IDataReader rs, string[] names, object owner); 

     public abstract void NullSafeSet(System.Data.IDbCommand cmd, object value, int index); 
     public abstract Type ReturnedType { get; } 

     public abstract SqlType[] SqlTypes { get; } 
    } 
+0

问题可能已解决。 'NullSafeGet'方法必须将名称[1]更改为名称[0],并且探针已解决。 –

回答

0

此事似乎得到解决,如正确地重新调试运行后做事。