你好我有一个使用nhibernate作为orm的应用程序,我需要存储代表时间的数据, 最好的方法是什么?
nhibenate不知道将时间字段从db转换为时间跨度,只有字符串。
答案 0 :(得分:7)
NHibernate支持DateTime, Ticks, TimeSpan and Timestamp。确保在映射元素上明确指定类型,因为不同的时间类型具有不同的语义,因此NHibernate猜测的可能不正确。
如果您仍然遇到问题,请修改帖子以包含实体的相关部分,映射文件以及您遇到的实际问题。
修改强>
例如,使用TimeSpan
的以下类:
public class MyClass
{
// Other properties
// ...
// ...
public virtual TimeSpan MyTimeProperty { get; set; }
}
映射文件:
<!-- other properties -->
<property name="MyTimeProperty" type="TimeSpan" /> <!-- Note: NH expects the DB type to be DbType.Int64 -->
您表示您正在尝试映射TimeSpan(“nhibenate不知道将时间字段从db转换为时间跨度,只有字符串”)。如果这是.NET(typeof
TimeSpan
)和数据库(DbType.Int64
)之间正确的类型匹配,NH应该自动执行此操作(即您不需要指定{{1 }})。因此,如果它不起作用,我怀疑你的设置方式存在问题。如果您使用完整签名发布属性/字段声明,从映射文件发布此属性的type="TimeSpan"
行,以及从数据库发布列定义,则可能会有所帮助。
答案 1 :(得分:2)
另外,请确保在日期时使用nullables,数据库中可以为null。
的DateTime?而不仅仅是DateTime。
如果没有,NHibernate将尝试将您的日期初始化为默认值,这可能不是您想要的。