2011-10-06 8 views
6

¿Cómo puedo asociar el tipo de NHibernate al tipo de hora de SQL Server? Estoy usando NH 3.2 y mapa por código.NHibernate y SQL 2008 Tipo de datos de hora

public class Schedule 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual TimeSpan Time { get; set; } 
} 

Aquí es mi clase de mapeo

public class ScheduleMapping : ClassMapping<Schedule> 
{ 
    public ScheduleMapping() 
    { 
     Id(x => x.Id, x => x.Generator(Generators.Native)); 
     Property(x => x.Name, x => x.NotNullable(true)); 
     Property(x => x.Time, x => x.NotNullable(true)); 
    } 
} 

Ahora, cuando se crea la base de datos de esta columna "Tiempo" tiene tipo BIGINT SQL en lugar de tiempo. He leído el artículo this y that, pero no tengo claro cómo aplicar ninguna de estas soluciones.

=========== EDITAR ====================

creé y se inserta nuevo calendario de la siguiente manera:

var newSchedule = new Schedule { 
        Name = "My Schedule", 
        Time = new TimeSpan(DateTime.Now.Hour, DateTime.Now.Minute, 0) 
        }; 
session.SaveOrUpdate(newSchedule); 

cuando se inserta estos datos (en torno a 19:27) de la columna que contiene el valor de tiempo '700200000000', que podría ser garrapatas, pero lo más importante fue que cuando me preguntó DB para estos valores

var retrievedSchedules = session.QueryOver<Schedule>().List(); 

la propiedad Time se estableció correctamente en 19: 27.Origin aliado, quería que la propiedad Time representara la hora en la que se supone que se ejecutará Schedule. Aunque el tipo de datos de SQL Server para esta columna se definió como BIGINT y el valor se representa como (lo más probable) tics, después de la recuperación se transitó correctamente a una hora, que es lo que yo quería. Esto ya no es una pregunta, pero voy a dejar esto para, con suerte, el beneficio de otra persona.

Respuesta

3

Esto, a su mapeo debe resolver su problema:

Property(x => x.Time, x => x => { x.NotNullable(true); x.Type<TimeAsTimeSpanType>(); }); 

Por defecto, NH utilizará x.Type<TimeSpanType>() como el tipo de NH para el tipo CLR Time ... que se localiza en el servidor SQL Server 2008 como un bigint .

Echa un vistazo aquí: http://jameskovacs.com/2011/01/26/datetime-support-in-nhibernate/. Cubre las diferentes asignaciones de tipos Clr -> NH -> Db para las fechas & veces.

+0

Sí, funcionó exactamente como sugirió. Conocía el tipo TimeAsTimeSpanType, pero no pude encontrar la manera de especificarlo en mi clase de mapeo. ¡Gracias! – user981375

Cuestiones relacionadas