Провайдер NHibernate Linq кэширует параметр запроса при первом вызове? - PullRequest
0 голосов
/ 31 января 2019

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()

Как я могу решить проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...