2012-04-27 11 views
0

Fluent NHibernate(1.3.0.727)の最新のNuGetパッケージを使用していますが、NHibernate 3.2で修正されていると思われる問題が発生しています最新のFluentではNHib 3.3を使用しています)。データベースはAzureのSQL Server 2008です。データ型timeとdatetimeがより大きい演算子で互換性がありません

私は、SQL 時間フィールドで.NET のTimeSpanを比較するクエリを実行すると、それは次の例外がスローされます。

データ型の時間と日時がオペレータよりも大きいに互換性がありません。

ここでサンプルクエリです:

TimeSpan ts = new TimeSpan(1, 0, 0); 
List<Message> messages = messageRepo.FilterBy(m => m.SendTime > ts).ToList(); 

ここに私のMessageクラスの抜粋です:

public class Message 
{ 
    public virtual int Id { get; set; } 

    [DataType(DataType.Time)] 
    public virtual TimeSpan? SendTime { get; set; }} 
} 

そしてここでは、関連するマッピングの詳細です:

public class MessageMap : ClassMap<Message> 
{ 
    public MessageMap() 
    { 
     Table("Message"); 
     LazyLoad(); 
     Id(x => x.Id).GeneratedBy.Identity().Column("MessageID"); 
     Map(x => x.SendTime).Column("SendTime").CustomType("TimeAsTimeSpan"); 
    } 
} 

私はすべて検索しました私が見つけたり考えたりすることができるすべてを試しました。たぶん私はただの何かを見逃しているだけでしょうか?助けてくれてありがとう。

答えて

2

FluentのMsSql2008構成が、NHibernateデータベースドライバをTimeAsTimeSpanを適切に処理しないように設定していることが分かります。 Sql2008ClientDriverにドライバを手動で設定すると、問題が修正されます。下記の4行目をご覧ください。

var rawConfig = Fluently.Configure() 
    .Database(
     MsSqlConfiguration.MsSql2008.ConnectionString(x => x.FromConnectionStringWithKey("ConnectionString")) 
      .Driver("NHibernate.Driver.Sql2008ClientDriver") 
    ) 
    .Mappings(m => m.FluentMappings.AddFromAssemblyOf<SiteUserMap>()) 
    .BuildConfiguration(); 
+0

優秀!できます! Thxブランドン... –

0

TimeSpanは数日間保持できるため、TimeではなくDateTimeと互換性があります。時間には時刻のみが含まれます。だから私はあなたのプロパティのDataType属性を使用すべきではないと思う - 少なくともDataType.Timeではない。

関連する問題