gpt4 book ai didi

c# - 无法在 Oracle 中使用 Fluent Nhibernate 获取间隔

转载 作者:行者123 更新时间:2023-11-30 17:46:10 25 4
gpt4 key购买 nike

我在 Oracle 数据库中有一个列:

INTERVAL DAY (0) TO SECOND (6)

我的模型:

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

流畅的模型图:

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

当我运行时

criteria.List<T>();

我得到以下异常:

{"could not execute query\r\n[ SELECT this_.Id as Id2_0_, this_.IFTest as IFTest2_0_ FROM INTERVALTESTTWO this_ ]\r\n[SQL: SELECT this_.Id as Id2_0_, this_.IFTest as IFTest2_0_ FROM INTERVALTESTTWO this_]"}

InnerException 为:

{"ORA-00904: \"THIS_\".\"IFTEST\": invalid identifier"}

NHibernate 适用于我的所有其他模型,只有具有间隔字段的模型才会出现此异常。我已尝试更改列名以防出现问题但无济于事。

如果有人设法让间隔类型在 Fluent NHibernate 中与 Oracle DB 一起工作并且可以帮助我,请提前致谢。

编辑

已解决;添加

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

映射使它起作用。感谢 Radmin(在下面回答)!

最佳答案

对 Oracle 不是很确定...但是,正如文档所说:

5.2.2. Basic value types

C# TimeSpan 默认映射到 DbType.Int64。而这不是我们想要的。

解决方案:TimeAsTimeSpanType

我们可以使用这种流畅的映射:

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

参见:TimeAsTimeSpanType.cs

/// <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

也可以在这里查看更多信息:Working with Time Type in Fluent Nhibernate generates exception "Unable to cast object of type 'System.DateTime' to type 'NHibernate.Type.TimeType"

此外,我建议尝试转义列名。在 SQL Server 中正在运行“[ColumnName]”。我想总的来说,包括 Oracle,这是可行的

Map(x => x.IntervalField, "`IFTest`");

关于c# - 无法在 Oracle 中使用 Fluent Nhibernate 获取间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26525447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com