В блоге довольно популярного сайта ayende.com блог . Есть раздел, который бросается в глаза очень специфическим образом.
Близко к концупост, он делает комментарий, цитируемый с сайта
Ответ, который я даю для таких вещей, как «ну, как я могу применить фильтрацию безопасности», состоит в том, что вы добавляете это в метод расширения и делаетекак-то так:
var query =
(
from post in session.Query<Post>()
where post.DueDate > DateTime.Now
select post
)
.FilterAccordingToUserPermissions(CurrentUser)
.ToList();
Мне очень нравится этот подход, если честно. Мне он кажется очень чистым. Но из-за моей неопытности и недостатка знаний ни о методах расширения, ни о nHibernate, яне могу воспроизвести его.
var query = ( from post in session.Query<Post>() ...
это говорит мне о том, что используемый объект является NHibernate.Linq.Query<T>
объектом. Я в основном использую QueryOver<T>
в своих проектах с целью их проецированияна Futures
, но я отвлекся ...
Я понимаю, что это очень неоднозначно, и совсем не очень сложная просьба - но мне было интересно, если кто-нибудь захочет опубликовать образец того, как можнодостигатьэтот пример кода.
Вот то, чего я не понимаю;
- Я не понимаю, как расширить объект
Query<T>
или QueryOver<T>
. - Если я продлилобъекты, я не понимаю, как заставить это расширение повлиять / фильтровать поиск в базе данных.
- Если я смогу повлиять на поиск в базе данных, я не понимаю, как это повлияет на производительность.
- Я не очень понимаю, откуда взялся
CurrentUser
.Мне кажется, что для этого потребуется еще одна поездка в базу данных, и это опять-таки идет вразрез с тем, что nhprof и большинство книг, которые я читал, говорят мне (не совершайте несколько поездок за однуоперация).
пункт 3 - тот, который сбивает меня с толку больше всего.Единственное, о чем я могу думать, это то, что этот метод берет запрос и запускает его, затем фильтрует, а затем возвращает результаты.Это кажется мне нелогичным (и, похоже, против многих вещей, которые я видел на сайте ayende.com/blog, поскольку он наследует множество необязательных обращений к базе данных)
у тебя есть это.Я довольно невежественен, и я понимаю, что для некоторых из вас более опытных, это действительно глупый вопрос.Но я слишком новичок, чтобы понять все, и большую часть пяти недель я потратил на это.