NHibernate组件映射:操作数类型冲突:bigint与时间不兼容

NHibernate组件映射:操作数类型冲突:bigint与时间不兼容,nhibernate,value-objects,mapping-by-code,Nhibernate,Value Objects,Mapping By Code,我正在编写一个应用程序,它通过代码使用NHibernate映射。当我将TimeSpan映射为实体的属性时,TimeSpan被正确映射 但是,如果我将时间跨度放在组件映射(值对象)中,我会得到一个en异常“操作数类型冲突:bigint与时间不兼容”-即使我正在确保使用时间跨度映射映射时间跨度 以下代码将正确保存时间跨度(例如“1753-01-01T08:00:00”) 公共类MyEntity { 公共虚拟整数Id{get;protected set;} 公共虚拟ISet其他实体{get;prote

我正在编写一个应用程序,它通过代码使用NHibernate映射。当我将TimeSpan映射为实体的属性时,TimeSpan被正确映射

但是,如果我将时间跨度放在组件映射(值对象)中,我会得到一个en异常“操作数类型冲突:bigint与时间不兼容”-即使我正在确保使用时间跨度映射映射时间跨度

以下代码将正确保存时间跨度(例如“1753-01-01T08:00:00”)

公共类MyEntity
{
公共虚拟整数Id{get;protected set;}
公共虚拟ISet其他实体{get;protected set;}
}
公共类实体
{
公共虚拟整数Id{get;protected set;}
公共虚拟时间跨度MyTimeSpan{get;protected set;}
}
公共类MyEntityMap:类映射
{
公共MyEntityMap()
{
表(“MyEntityTable”);
Id(x=>x.Id,map=>
{
地图栏(“Id”);
});
集合(x=>x.OtherEntities,c=>
{
c、 表(“其他实体表”);
c、 逆(真);
c、 键(k=>k.Column(“MyEntityId”);
},r=>r.OneToMany(m=>
{
m、 NotFound(NotFoundMode.Exception);
m、 类别(另一实体的类型);
}));
}
}
公共类AnotherEntityMap:类映射
{
公共AnotherEntityMap()
{
表(“另一个实体表”);
Id(x=>x.Id,map=>
{
映射列(“AnotherEntityId”);
});
属性(x=>x.MyTimeSpan,m=>m.Type());
}
}
但是,以下代码将尝试将TimeSpan保存为int(例如28800000000000)并引发异常。(类似地,当它尝试为嵌套值对象添加水合物时,会引发异常。)

公共类MyEntity
{
公共虚拟整数Id{get;protected set;}
公共虚拟MyValueObject MyValueObject{get;protected set;}
}
公共类MyValueObject
{
公共虚拟ISet NestedValueObjects{get;protected set;}
}
公共类NestedValueObject
{
公共虚拟时间跨度MyTimeSpan{get;protected set;}
}
公共类MyEntityMap:类映射
{
公共MyEntityMap()
{
表(“MyEntityTable”);
Id(x=>x.Id,map=>
{
地图栏(“Id”);
});
组件(x=>x.MyValueObject,c=>
{
c、 设置(x=>x.NestedValueObjects,映射=>
{
映射表(“NestedValueObjects”);
map.Key(k=>k.Column(“MyEntityId”);
},r=>r.Component(n=>
{
n、 属性(x=>x.MyTimeSpan,m=>m.Type());
}));
});
}
}

映射是否有错误?或者NHibernate按代码映射存在错误?

我假设这是一个NHibernate按代码映射的错误,并引发了一个错误。

事实上是的一个副本,在当前主版本中已解决,尚未发布。这是同一问题的一部分吗?在NH-3913中,由于缺少方法签名,您无法映射非公共属性,这是我之前在这里询问的问题:在上述问题中,我试图映射公共属性,但它将属性保存为BIGINT而不是TimeSpan。
public class MyEntity
{
    public virtual int Id { get; protected set; }
    public virtual ISet<AnotherEntity> OtherEntities { get; protected set; }
}

public class AnotherEntity
{
    public virtual int Id { get; protected set; }
    public virtual TimeSpan MyTimeSpan { get; protected set; }
}

public class MyEntityMap : ClassMapping<MyEntity>
{
    public MyEntityMap()
    {
        Table("MyEntityTable");
        Id(x => x.Id, map =>
        {
            map.Column("Id");
        });

        Set(x => x.OtherEntities, c =>
        {
            c.Table("OtherEntityTable");
            c.Inverse(true);
            c.Key(k => k.Column("MyEntityId"));
        }, r => r.OneToMany(m =>
        {
            m.NotFound(NotFoundMode.Exception);
            m.Class(typeof(AnotherEntity));
        }));
    }
}

public class AnotherEntityMap : ClassMapping<AnotherEntity>
{
    public AnotherEntityMap()
    {
        Table("AnotherEntityTable");

        Id(x => x.Id, map =>
        {
            map.Column("AnotherEntityId");
        });

        Property(x => x.MyTimeSpan, m => m.Type<TimeAsTimeSpanType>());
    }
}
public class MyEntity
{
    public virtual int Id { get; protected set; }
    public virtual MyValueObject MyValueObject { get; protected set; }
}

public class MyValueObject
{
    public virtual ISet<NestedValueObject> NestedValueObjects { get; protected set; }
}

public class NestedValueObject
{
    public virtual TimeSpan MyTimeSpan { get; protected set; }
}

public class MyEntityMap : ClassMapping<MyEntity>
{
    public MyEntityMap()
    {
        Table("MyEntityTable");
        Id(x => x.Id, map =>
        {
            map.Column("Id");
        });

        Component(x => x.MyValueObject, c =>
        {
            c.Set(x => x.NestedValueObjects, map =>
            {
                map.Table("NestedValueObjects");
                map.Key(k => k.Column("MyEntityId"));
            }, r => r.Component(n =>
            {
                n.Property(x => x.MyTimeSpan, m => m.Type<TimeAsTimeSpanType>());
            }));
        });
    }
}