基準を使用して、一意のキーに基づいてデータベースをクエリしています。しかし、私は奇妙なシナリオを経験しています。2つまたは3つのクエリの後、タイムアウトの期限切れエラーが発生し始めます。
using (NHibernate.ISession session = m_SessionFactory.OpenSession())
{
using (ITransaction transacion = session.BeginTransaction())
{
if (cashActivity.ActivityState == ApplicationConstants.TaxLotState.Deleted || cashActivity.ActivityState == ApplicationConstants.TaxLotState.Updated)
{
IList<CashActivity> lsCActivity = RetrieveEquals<CashActivity>("UniqueKey",cashActivity.UniqueKey);
if (lsCActivity != null && lsCActivity.Count > 0)
cashActivity.CashActivityID = lsCActivity[0].CashActivityID;
}
if (cashActivity.ActivityState == ApplicationConstants.TaxLotState.Deleted)
{
session.Delete(cashActivity);
}
else
session.SaveOrUpdate(cashActivity);
}
}
}
public IList<T> RetrieveEquals<T>(string propertyName, object propertyValue)
{
using (Isession session = m_SessionFactory.OpenSession())
{
Icriteria criteria = session.CreateCriteria(typeof(T));
criteria.Add(Restrictions.Eq(propertyName, PropertyValue));
IList<T> matchingObjects = criteria.List<T>();
return matchingObjects;
}
}
コードに変更を加えてStateLessSessionの使用を開始しましたが、その変更によってタイムアウトエラーの頻度が減るだけです。
decuggingした後、私はIList matchingObjects = Criteria.List();を見つけました。例外の原因です。ただし、これは1つの値のみを返すため、テーブルにも現在100行を超える行が含まれていないため、タイムアウトエラーが発生することはありません。助言がありますか??