AFAIK IRepository.PerformQuery (запрос IQuery) был удален из последней сборки SA в пользу использования Расширенного объекта запроса.
public class ValidateHashQuery : IValidateHashQuery
{
public bool Validate(string username, string password)
{
ISession nhSession = NHibernateSession.Current;
// you now have your session and run your query however you like
}
}
public class UserTasks : IUserTasks
{
private readonly IRepository<User> _userRepository;
private readonly IValidateHashQuery _validateHashQuery;
public UserTasks(IRepository<User> userRepository, IValidateHashQuery validateHashQuery)
{
_userRepository = userRepository;
_validateHashQuery = validateHashQuery;
}
public List<User> GetAll()
{
return _userRepository.GetAll().ToList();
}
public User Get(int id)
{
return _userRepository.Get(id);
}
public User CreateOrUpdate(User user)
{
return _userRepository.SaveOrUpdate(user);
}
public void Delete(int id)
{
var entity = _userRepository.Get(id);
if(entity != null)
{
_userRepository.Delete(entity);
}
}
public bool Validate(string username, string password)
{
return _validateHashQuery.Validate(username, password);
}
}
Но, глядя на ваши пользовательские задачи, похоже, что он ничего не делает, кроме вызова хранилища, не уверен, какое значение это имеет, почему бы просто не использовать хранилище напрямую?
То же самое относится и к запросу проверки, вы можете добавить эту зависимость к вашему контроллеру и вызвать запрос проверки пользователя непосредственно оттуда, и установить cookie / сессию в соответствии с результатом.
Затем перед выполнением задачи, требующей входа пользователя в систему, вы проверяете наличие этого файла cookie (в идеале некоторый атрибут в действии [Autherise]). В зависимости от вашего сценария вы можете захотеть получить это разрешение в самой задаче.