Дело в том, что фактический запрос не выполняется в этой строке:
scope.AsQueryable<Customer>();
Поскольку вы возвращаете только объект IQueryable
, который можно запросить позже.
Итак, он запускается при доступе к данным:
Assert.Greater(result.Count(), 0);
В этот момент очевидно, что сессия уже закрыта (она закрывается при выходе из блока using
).
Одним из возможных решений было бы исключение SessionScope
из метода GetAllCustomers
:
public IQueryable<Customer> GetAllCustomers(SessionScope scope)
{
return scope.AsQueryable<Customer>();
}
using (SessionScope scope = new SessionScope())
{
var result = from x in GetAllCustomers(scope) select x;
Assert.Greater(result.Count(), 0);
}