2013-12-11 3 views
1

Мне нужно выбрать продукт для пользователя на основе других данных в базе данных. Если данные отфильтрованы в базе данных, для которых требуется меньше данных для отправки на сервер.nhibernate с подзапросом в базе данных

пользователя (Id) продукта (код) доступа (user_id, код) // Сопоставление пользователей объекта коды

Будет ли этот запрос выполнить на базе отправки обратно минимальный amout данных?

var products = QueryOver.Of<Access>() 
    .Where(a => a.User_Id == User.Id()) 
    .Select(Projections.Property<Acces>(a => a.Code)); 

var access = QueryOver.Of<Product>() 
    .WithSubquery.WhereProperty(h => h.Code) 
    .In(products) 
    .Future(); 
+0

Попробуйте NHibernate Профайлер: http://www.hibernatingrhinos.com/products/nhprof –

+0

Трудный ответ, не пытаясь, просто активировать журнал запросов и посмотреть, что происходит. –

+3

Этот вопрос не соответствует теме, потому что речь идет о ситуации с локолом, которая отвечает только за то, что мы находимся на компьютере OP – rene

ответ

1

Это очень разумный способ фильтрации данных. Результат ваших запросов будет выглядеть как один SELECT, против БД:

SELECT ... 
FROM Product 
WHERE Code IN (SELECT Code FROM Access WHERE UserId = @userId) 

Таким образом, это будет точно выполняться на БД сервера, меньше данных будут переданы, и более того, это также позволит вам сделать правильный пейджинг (при необходимости) - этот сценарий так, как фильтровать parent над своими one-to-many отношения (найти родителей, которые ребенок имеет ...)

Может проверить эти Join several queries to optimise QueryOver query, NHibernate QueryOver - Retrieve all, and mark the ones already "selected"

Смежные вопросы