Как сделать запросы NHibernate со ссылкой в ​​качестве критерия? - PullRequest
3 голосов
/ 16 марта 2010

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

public class Foo
{ 
    public int Id { get; set; }
    public string Name { get; set; }
    public Bar ReferencedBar { get; set; }
}    

public class Bar
{ 
    public int Id { get; set; }
    public string Name { get; set; }
}

Затем Foo отображается в Bar:

public class FooMapping : ClassMap<Foo>
{
    public FooMapping()
    {
        Id(c => c.Id).GeneratedBy.HiLo("1");
        Map(c => c.Name).Not.Nullable().Length(100);
        References(c => c.Bar);
    }
}

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

public IList<Foo> GetAllFoosReferencingBar(Bar bar)
{
    using (var tx = Session.BeginTransaction())
    {
        var result = Session.CreateCriteria(typeof(Foo))
            .Add(Restrictions./* foo.ReferencedBar == bar */) // <-- How to add restriction using reference? 
            .List<Foo>();
        tx.Commit();
        return result; 
    }
}

1 Ответ

2 голосов
/ 16 марта 2010

Это на самом деле проще, чем можно подумать. Просто добавьте ограничение Equal к критерию, используя имя свойства и объект напрямую:

public IList<Foo> GetAllFoosReferencingBar(Bar bar)
{
    using (var tx = Session.BeginTransaction())
    {
        var result = Session.CreateCriteria(typeof(Foo))
            .Add(Restrictions.Eq("ReferencedBar", bar) // <--- Added restriction
            .List<Foo>();
        tx.Commit();
        return result; 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...