2011-12-07 12 views
0

期待どおりに動作するようにマッピングファイルを構成できません。私のモデルはnull可能なDateTimeプロパティを持っています。これらは私のマッピングです。FluentNHibernate:マッピングの確認

... 
Map(e => e.NullableDateTimeProperty).Nullable(); 
... 

これらはマッピングを検証するためのテストです。

... 
.CheckProperty(e => e.NullableDateTimeProperty, (DateTime?)DateTime.Now) 
.VerifyMappings(); 

しかし、私はこのテストを実行すると、ApplicationExceptionをがスローされます。

System.ApplicationException : For property 'NullableDateTimeProperty' expected type 'System.DateTime' but got 'System.Nullable`1[[System.DateTime]]' 
+0

これについての回答はありますか?私は今まさに同じ問題を抱えており、Googleで答えを見つけることができません... – Frito

答えて

0

その後、型を明示的に述べることはトリックに

.CheckProperty(e => e.NullableDateTimeProperty, (DateTime?)DateTime.Now, (e, value) => e.NullableDateTimeProperty = value) 

オリジナルを行うことができます:多分

CopmilerはDateTimeの暗黙の変換を挿入しますか?日時にラムダを返す前に、試してみてください。

.CheckProperty(e => (DateTime?)e.NullableDateTimeProperty, (DateTime?)DateTime.Now) 
+0

FlunetNHibernateが次の式を使ってメンバーにアクセスしようとすると、この構文は別の例外になります: 'System.ArgumentException:メンバーアクセスではありません パラメータ名:式 ' – Sadegh

+0

親愛なる火災私は質問して同じ結果が得られる前にこの構文をテストしました。 – Sadegh

0

を、私はその古い質問を知っているが、私は物事が平等のチェックを処理するためのクラスを作成することによって、作業を取得するために管理:

public class NullableDateTimeComparer : IEqualityComparer 
{ 
    public new bool Equals(object x, object y) 
    { 
     var a = x as DateTime?; 
     var b = y as DateTime?; 

     if (a == null && b == null) 
      return true; 

     if (a == null || b == null) 
      return false; 

     //there is some milliseconds difference between a and b 
     //so a.Value == b.Value fails 
     return a.Value.Subtract(b.Value).Seconds == 0; 
    } 

    public int GetHashCode(object obj) 
    { 
     return obj == null ? 0 : obj.GetHashCode(); 
    } 
} 

その後、 CheckPropertyを呼び出すときに等価比較関数を3番目のパラメータとして使用します。

.CheckProperty(e => e.NullableDateTimeProperty, DateTime.Now, new NullableDateTimeComparer()) 
関連する問題