NH 4.0.4.400. Поставщик Linq использует параметры запроса из первого вызова в последующих вызовах, если эти параметры не распространяются на SQL.
Пример:
// In first session
var costCenters = _session.Query<CostCenter>()
.Select(x => new CostCenterDto
{
ID = x.ID,
Code = x.Code,
Name = _dataManager.GetData(_session, x.TranslationID, "en")
})
.ToList()
// All works perfect: all CostCenters is english name.
// Later in another session
var costCenters = _session.Query<CostCenter>()
.Select(x => new CostCenterDto
{
ID = x.ID,
Code = x.Code,
Name = _dataManager.GetData(_session, x.TranslationID, "vi")
})
.ToList()
// Magic happens: all CostCenter is still english name.
// _dataManager.GetData
public string GetData(ISession session, Guid translationID, string languageCode)
{
// Get all data by languageCode
...
}
Я отлаживаю внутри _dataManager.GetData
При втором вызове значение аргумента languaceCode
по-прежнему равно "en".
Если я вызову ToList
до Select
, как показано ниже, результат будет правильным.
var costCenters = _session.Query<CostCenter>()
.ToList()
.Select(x => new CostCenterDto
{
ID = x.ID,
Code = x.Code,
Name = _dataManager.GetData(_session,x.TranslationID, "vi")
})
.ToList()
Как я могу решить проблему?