Nhibernate 将两个Int映射到DateTime

Nhibernate 将两个Int映射到DateTime,nhibernate,fluent-nhibernate,mapping,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Mapping,Fluent Nhibernate Mapping,你好 我试图创建一个用户类型,将存储在数据库中的两个“int”映射到Datetime。 我的“int”在数据库中调用了time和date,这样我就想得到想要的效果。但我收到了错误:指定的强制转换无效 我的代码: public class DateTimeUserType : ImmutableUserType { public override object NullSafeGet(IDataReader rs, string[] names, object owner)

你好

我试图创建一个用户类型,将存储在数据库中的两个“int”映射到Datetime。 我的“int”在数据库中调用了time和date,这样我就想得到想要的效果。但我收到了错误:指定的强制转换无效

我的代码:

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; }
    }

问题似乎已解决,例如重新调试后工作正常。

问题可能已解决。方法“NullSafeGet”必须将名称[1]更改为名称[0],并且已解析探测。