2009-06-03 25 views
6

你好,我有一个应用程序,使用nhibernate作为orm,我需要存储的数据,代表时间, 什么是最好的办法呢?时间和Nhibernate

nhibenate不知道将时间字段从数据库转换为时间跨度,只有字符串。

回答

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

表明您正在尝试映射时间跨度(“nhibenate不知道将时间字段从数据库转换为时间跨度,只有字符串”)。如果这是.NET(typeofTimeSpan)与数据库(DbType.Int64)之间的正确类型匹配,则NH应自动执行此操作(即,您不需要指定type="TimeSpan")。所以如果它不能正常工作,我怀疑你的设置方式有问题。如果您使用完整签名发布属性/字段声明,映射文件中该属性的<property>行以及数据库中的列定义,则可能会有所帮助。

+0

我需要指定流利的nhibernate类型吗? – 2009-06-06 14:28:44

2

此外,请确保您使用数据库中可以为null的DateTimes的可用空值。

DateTime?而不仅仅是DateTime。

如果不是,NHibernate会尝试初始化您的日期到一个默认值,这可能不是你想要的。