2011-10-06 13 views
6

Jak mapować typ NHibernate na typ TIME SQL Server? Używam NH 3.2 i map-by-code.Typ daty NHibernate i SQL 2008

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

Oto moja klasa mapowanie

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)); 
    } 
} 

Teraz, gdy tworzę bazę danych z tej kolumny "Time" ma typ BIGINT SQL zamiast czasu. Przeczytałem artykuł this i that, ale nie jest dla mnie jasne, jak zastosować jedno z tych rozwiązań.

=========== EDIT ====================

I i wprowadza nowy plan tak:

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

kiedy te dane został wstawiony (około 7:27 PM) kolumny zawierał wartości czasu „700200000000”, który mógłby być kleszcze, ale najważniejsze było to, że kiedy zapytaliśmy DB dla tych wartości

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

Właściwość Czas została poprawnie ustawiona na 19: 27. Orgin sojusznik Chciałbym, aby właściwość Time reprezentowała czas, w którym harmonogram powinien działać. Mimo że typ danych SQL Server dla tej kolumny został zdefiniowany jako BIGINT, a wartość jest reprezentowana jako (najprawdopodobniej) tyknięcia, po pobraniu została poprawnie przeniesiona do czasu, co jest tym, czego chciałem. To już nie jest pytanie, ale zamierzam to zostawić, z nadzieją, na korzyść kogoś innego.

Odpowiedz

3

To z Twojego mapowanie powinno rozwiązać problem:

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

Domyślnie NH użyje x.Type<TimeSpanType>() jako typ NH dla danego typu CLR Time ... który mapuje do SQL Server 2008 jako bigint .

Zajrzyj tutaj: http://jameskovacs.com/2011/01/26/datetime-support-in-nhibernate/. Obejmuje różne mapowania typu Clr -> NH -> Db dla dat & razy.

+0

Tak, działało dokładnie tak, jak zasugerowałeś. Byłem świadomy typu TimeAsTimeSpanType, ale nie mogłem dowiedzieć się, jak to określić w mojej klasie mapowania. Dzięki! – user981375