【发布时间】:2009-06-06 02:07:27
【问题描述】:
你好,我有一个使用 nhibernate 作为 orm 的应用程序,我需要存储代表时间的数据, 最好的方法是什么?
nhibenate 不知道将时间字段从 db 转换为时间跨度,只有字符串。
【问题讨论】:
标签: nhibernate nhibernate-mapping
你好,我有一个使用 nhibernate 作为 orm 的应用程序,我需要存储代表时间的数据, 最好的方法是什么?
nhibenate 不知道将时间字段从 db 转换为时间跨度,只有字符串。
【问题讨论】:
标签: nhibernate nhibernate-mapping
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 应该自动执行此操作(即您不需要指定 type="TimeSpan")。因此,如果它不起作用,我怀疑您的设置方式存在问题。如果您发布带有完整签名的属性/字段声明、映射文件中此属性的 <property> 行以及数据库中的列定义,这可能会有所帮助。
【讨论】:
另外,请确保您的 DateTimes 使用可空值,在数据库中可以为空。
日期时间?而不仅仅是日期时间。
如果不是,NHibernate 将尝试将您的日期初始化为默认值,这可能不是您想要的。
【讨论】: