我已經在一個帶有屬性的類中定義了一個查詢,但我試圖使用這個屬性來構建一個相當複雜的查詢,並且碰到NHibernate告訴我它無法解析屬性:DueDate 。QueryOver使用自定義投影和查詢參數
我的查詢類看起來是這樣的:
public class SomeQuery {
public DateTime DueDate { get; private set; }
public SomeQuery(DateTime dueDate) {
DueDate = dueDate;
}
public QueryOver GetQueryOver() {
PrimaryObject po = null;
SubObject so = null;
return QueryOver.Of<PrimaryObject>(() => po)
.JoinAlias(() => so.SubObjects,() => so)
.Where(
Restrictions.Le(
DateProjections.DateDiff("d",() so.Value,() = DueDate),
0
)
);
}
}
完全按照安德魯·惠特克的博客中描述QueryOver Series - Part 7: Using SQL Functions
的PrimaryObject
和SubObject
的內容我已經實現了DateProjections類是不是真的很重要以下示例除外:
public class PrimaryObject {
public virtual Guid Id { get; set; }
public List<SubObject> Implementations { get; set; }
}
public class SubObject {
public virtual Guid Id { get; set; }
public virtual string Value { get; set; }
}
對於映射,您可以保護我知道這些字段以合理的方式映射到數據庫,因爲我不認爲這是問題所在。
當我嘗試在測試中使用此查詢,如下所示:
var testDate = new DateTime(2015, 06, 01);
IEnumerable<PrimaryObject> result = repository.FindAll(new SomeQuery(testDate));
我得到一個NHibernate.QueryException
:
NHibernate.QueryException : could not resolve property: DueDate of: PrimaryObject
很顯然,我有一個映射的性質,這導致投影發生胃灼熱。
尋找最小儀式解決方案來獲取DueDate映射。我看過安德魯在QueryOver Series - Part 9: Extending QueryOver to Use Custom Methods and Properties的例子,但感覺好像很多儀式。
我也用Google搜索的解決方案,但我的谷歌富失敗我..
建議?解決方案?
是實際的DateDiff調用周圍的代碼?它看起來不像可編譯的C#代碼。 –
它編譯,我只是減少了連接的數量和從原來的位置,直到我有一個最小的編譯子集,但破碎的代碼。 –