2011-12-07 139 views
0

我無法配置我的映射文件,以達到預期效果。我的模型具有可以爲空的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

您是否曾經爲此找到答案?我有完全相同的問題,現在並不能找到關於谷歌... – 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:還不是會員接入 參數名:expression' – 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時使用相等比較器作爲第三個參數:

.CheckProperty(e => e.NullableDateTimeProperty, DateTime.Now, new NullableDateTimeComparer())