C# 无法使用Oracle中的Fluent Nhibernate获取间隔

C# 无法使用Oracle中的Fluent Nhibernate获取间隔,c#,oracle,nhibernate,fluent-nhibernate,C#,Oracle,Nhibernate,Fluent Nhibernate,我在Oracle DB中有一列,如下所示: INTERVAL DAY (0) TO SECOND (6) 我的模型: public class IntervalTest { public virtual int Id { get; set; } public virtual TimeSpan IntervalField { get; set; } } Fluent ModelMap: public class IntervalTestMap : ClassMap<Int

我在Oracle DB中有一列,如下所示:

INTERVAL DAY (0) TO SECOND (6)
我的模型:

public class IntervalTest
{
    public virtual int Id { get; set; }
    public virtual TimeSpan IntervalField { get; set; }
}
Fluent ModelMap:

public class IntervalTestMap : ClassMap<IntervalTest>
{
    public IntervalTestMap()
    {
        Table("INTERVALTESTTWO");
        Id(x => x.Id);
        Map(x => x.IntervalField, "IFTest");
    }
}
当我跑的时候

criteria.List<T>();
我得到以下例外情况:

{无法执行查询\r\n[从INTERVALTESTTWO this\r\n中选择此\u.Id作为Id2\u 0,从INTERVALTESTTWO this\r\n中选择此\u.Id作为Id2\u 0,从INTERVALTESTTWO this\r\n中选择此\u.IFTest作为IFTest2\u 0}

除了:

{ORA-00904:\THIS\如果测试\:无效标识符}

NHibernate适用于我的所有其他模型,只有那些具有间隔字段的模型才会出现此异常。我已经尝试过更改列名,以防这是一个无效的问题

如果有人能够使用Oracle DB在Fluent NHibernate中使用interval type,请提前感谢,并可以帮助我

编辑

解决;添加

.Type<NHibernate.Type.TimeAsTimeSpanType>();

对地图的理解使它起作用。感谢下面的Radmin回答

不完全确定Oracle。。。但是,正如文件所说:

默认情况下,C时间跨度映射到DbType.Int64。这不是我们想要的

解决方案:TimeAsTimeSpanType

我们可以使用此fluent映射:

Map(c => c.IntervalField, "IFTest")
   .Type<NHibernate.Type.TimeAsTimeSpanType>();

恐怕还是会犯同样的错误!列类型为“从天到秒的间隔”。这个错误通常是由于无效的列名引起的,这与我多次检查的链接文章中的转换问题不同:然后我建议用特殊字符转义列名。我更新了我的回答尝试了“IFTEST”&get:{ORA-01747:无效的user.table.column、table.column或column规范},当我尝试了“IFTEST”时,{ORA-01756:带引号的字符串未正确终止}。:/当然,这首先表明该专栏是正确的,甲骨文抛出了模糊的错误?先生。。。希望能帮助更多。你能改一下列名吗?至少要测试列名是否是问题所在?你能试试吗?和您是否使用了正确的转义符号?仅使用了正确的转义符号'not',我得到了原始错误:/I我已尝试更改列名,然后现在重试
/// <summary>
/// Maps a <see cref="System.TimeSpan" /> Property to an 
/// <see cref="DbType.Time" /> column
/// This is an extra way to map a <see cref="DbType.Time"/>. You already have 
/// <see cref="TimeType"/>
/// but mapping against a <see cref="DateTime"/>.
/// </summary>
[Serializable]
public class TimeAsTimeSpanType : PrimitiveType, IVersionType
Map(x => x.IntervalField, "`IFTest`");