0
私は2つのクラス、Log
とUserProfile
を持っています。 Log
は、UserProfile
を参照しています。関連テーブルの列のNHibernateクエリ
ログを検索するフィルタを実装しようとしています。現在、それは次のようになります。
/// <summary>
/// Searches the logs for matching records
/// </summary>
/// <param name="fromUTC">Start point timestamp of the search</param>
/// <param name="toUTC">End point timestamp of the search</param>
/// <param name="ofSeverity">Severity level of the log entry</param>
/// <param name="orHigher">Retrieve more severe log entries as well that match</param>
/// <param name="sourceStartsWith">The source field starts with these characters</param>
/// <param name="usernameStartsWith">The username field starts with these characters</param>
/// <param name="maxRecords">The maximum number of records to return</param>
/// <returns>A list of Log objects with attached UserProfile objects</returns>
public IEnumerable<Log> SearchLogs(
DateTime fromUTC,
DateTime toUTC,
string ofSeverity,
bool orHigher,
string sourceStartsWith,
string usernameStartsWith,
int maxRecords)
{
ofSeverity = ofSeverity ?? "INFO";
var query = DetachedCriteria.For<Log>()
.SetFetchMode("UserProfile", NHibernate.FetchMode.Eager)
.Add(Restrictions.In("Severity", (orHigher ?
Translator.SeverityOrHigher(ofSeverity) : Translator.Severity(ofSeverity)).ToArray()))
.Add(Restrictions.Between("TimeStamp", fromUTC, toUTC))
.AddOrder(Order.Desc("TimeStamp"))
.SetMaxResults(maxRecords);
if ((sourceStartsWith ?? string.Empty).Length > 0)
{
query
.Add(Restrictions.InsensitiveLike("Source", sourceStartsWith, MatchMode.Start));
}
if ((usernameStartsWith ?? string.Empty).Length > 0)
{
query
.Add(Restrictions.InsensitiveLike("UserProfile.UserName",
usernameStartsWith, MatchMode.Start));
}
return query.GetExecutableCriteria(_Session).List<Log>();
}
...これがある限り、私はusernameStartsWith
値を指定しないと正常に動作します。
私はusernameStartsWith
値を指定した場合、私は言って、死の素敵な黄色の画面が出ます:
could not resolve property: UserProfile.UserName of: C3.DataModel.Log
私はこの仕事を得るために私は考えることができるすべての順列を試してみました、私はできません。誰かが私が間違っていることを教えてもらえますか?
どのような最後に?私は、UserProfileレコードではなく、UserProfileに関連付けられているログレコードを取得しようとしています。 –
私はあなたがログレコードの後で、ユーザープロファイルレコードではないことを理解します。少なくとも私が提案したことを試してみましたか? Nhibernateで作業しているときにも同じエラーが発生しました。間違った結合に関連していると思います。 – gowansg
それは本当にトリックでした。あなたを疑って申し訳ありません。 –