【问题标题】:Using Time columns with NHibernate, Fluent NHibernate and SQL Server 2008在 NHibernate、Fluent NHibernate 和 SQL Server 2008 中使用时间列
【发布时间】:2010-09-16 13:26:54
【问题描述】:

我的 SQL Server 2008 数据库中有一个包含时间列的表。

我试图映射到的对象的属性是 TimeSpan。

我怎样才能告诉 FluentNHibernate 使用 TimeAsTimeSpan NHibernate 类型,这样我就不会有转换问题?

【问题讨论】:

    标签: nhibernate sql-server-2008 fluent-nhibernate nhibernate-mapping


    【解决方案1】:

    这对我有用:

    Map(x => x.TimeFrom)
        .CustomType("TimeAsTimeSpan");
    

    【讨论】:

    • 这行得通,但是您如何处理数据库中的 NULL 值? TimeSpan.Zero 等于新的 TimeSpan(0,0,0),因此它不起作用,并被 NHibernate 的 TimeAsTimeSpanType 持久化为“00:00:00”。浏览源代码,它似乎根本不处理 NULL 值?无论我将 NULL 还是“00:00:00”放在一列中,这都会从 NHibernate 以 TimeSpan.Zero 的形式返回。什么给了?
    • @mindplay.dk TimeSpan 不能代表nullTimeSpan?可以。
    【解决方案2】:

    如果您使用的是约定,那么这对我来说就可以了:

    public class PropertyConvention : IPropertyConvention 
    {
        public void Apply(IPropertyInstance instance)
        {
            if (instance.Property.PropertyType == typeof(TimeSpan))
                instance.CustomType( "TimeAsTimeSpan" );
        }
    }
    

    【讨论】:

      【解决方案3】:

      您应该可以使用CustomType 对其进行映射。

      【讨论】:

      • 我在CustomType中放了什么? TimeAsTimeSpan 还是 DBType.Time?使用 TimeAsTimeSpan 我得到一个异常,因为该类型没有没有参数的构造函数
      • 链接文章的第一行是“CustomType("TimeAsTimeSpan") 应该可以正常工作”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多