2011-10-06 17 views
6

NHibernate型をSQL ServerのTIME型にマップするにはどうすればよいですか?私はNH 3.2と地図ごとのコードを使用しています。私はこのコラム "時間" からデータベースを作成するときにここでNHibernateとSQL 2008の時刻データ型

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

は私のマッピングクラスは、今

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

である代わりに、TIMEのBIGINT SQL型があります。私はthisthatの記事を読んだことがありますが、これらの解決策をどのように適用するかはわかりません。

=========== EDIT ====================私が作成され、このように新しいスケジュールを挿入

このデータはティック可能性が時間]列に含まれる値が「7002億」(19:27付近)を挿入したが、私は、これらの値のためのDBを照会したときに最も重要なことは、ということでした
var newSchedule = new Schedule { 
        Name = "My Schedule", 
        Time = new TimeSpan(DateTime.Now.Hour, DateTime.Now.Minute, 0) 
        }; 
session.SaveOrUpdate(newSchedule); 

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

Timeプロパティが19:27に正しく設定されていました.Origin私は、Scheduleが実行されるはずの時間を表すTimeプロパティを必要としていました。この列のSQL Serverのデータ型はBIGINTとして定義されていて、その値は(ほとんどの場合)ティックで表されますが、取得後は正しく変換されていました。これはもはや問題ではありませんが、私は、うまくいけば、他の誰かの利益のためにこれを残すつもりです。

答えて

3

これ、あなたのマッピングで、あなたの問題を解決する必要があります

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

デフォルトでは、NHはCLR Timeタイプ... BIGINTとしてSQL Server 2008にマップするためのNHタイプとしてx.Type<TimeSpanType>()を使用します。 。

ここをクリックしてください:http://jameskovacs.com/2011/01/26/datetime-support-in-nhibernate/これは、日付が&回の異なるClr - > NH - > Db型のマッピングをカバーしています。

+0

はい、あなたの提案どおりに機能しました。私はTimeAsTimeSpanType型を認識していましたが、マッピングクラスでその型を指定する方法を理解できませんでした。ありがとう! – user981375

関連する問題