критерий + nhibernate + получить объект на основе 2 идентификаторов - PullRequest
1 голос
/ 19 февраля 2012

Я хочу получить объект на основе 2 идентификаторов.

Это правильный критерий для этого?

var notes = session
                .CreateCriteria(typeof(Note))
                .Add(Restrictions.Eq("Product", productId))
                .Add(Restrictions.Eq("User", userId))
                .List<Note>();

этот запрос извлекает заметки, которые принадлежат пользователюи продукт?

и соответствует ли этот критерий:

var comments = session
                .CreateCriteria(typeof(Comment))
                .Add(Restrictions.Eq("Product", productId))
                .Add(Restrictions.Eq("IsOwnComment", 0))
                .List<Comment>();
            return comments;

возвращает комментарии продуктов, где логическое значение равно 0?

я сделал это правильно?

br

Ответы [ 2 ]

2 голосов
/ 19 февраля 2012
var notes = session
                .CreateCriteria(typeof(Note))
                .Add(Restrictions.Eq("Product", productId))
                .Add(Restrictions.Eq("User", userId))
                .List<Note>();

Это не будет работать так. Вам нужно будет указать всю сущность пути ассоциации Продукта и Пользователя. То, что вы можете сделать, это использовать специальное свойство id:

var notes = session
                .CreateCriteria(typeof(Note))
                .Add(Restrictions.Eq("Product.id", productId))
                .Add(Restrictions.Eq("User.id", userId))
                .List<Note>();

Для второго примера используйте Restrictions.IsNull("IsOwnComment")

1 голос
/ 19 февраля 2012

Когда вы используете Добавить выражение критериев без идентификации между ними выражений И или Или, NHibernate будет использовать И по умолчанию, поэтому написанные вами критерии будут идентичны этим запросам HQL:

"from Note note where note.Product=:productId and note.User=:userId"

и

"from Comment comment where comment.Product=:productId and comment.IsOwnComment=0"

есть только одна вещь, на которую следует обратить внимание: если отношение Product и User много-к-одному, эти запросы не будут работать, вместо этого вы должны использовать Product.Id и User.Id в качестве имени свойства

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