NHibernate: компоненты HasMany и предложение Where / Contains - PullRequest
2 голосов
/ 12 октября 2009

Я пытаюсь понять, как создать запрос с использованием Linq для NHibernate.

У меня есть два класса, как это:

public class Foo
{
    private ISet<Bar> _bars = new HashedSet<Bar>();
    public virtual ISet<Bar> Bars
    {
        get { return _bars; }
        set { _bars = value; }
    }
}

public class Bar
{
    public string Name { get; set; }
    public string Color { get; set; }
}

Коллекция Foo's Bar отображается как коллекция компонентов один-ко-многим.

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

var myBar = new Bar { Name = "test", Color = "testColor" };

var matchingFoos = Session.Linq<Foo>
                   .Where(foo => foo.Bars.Contains(myBar),
                          new BarEqualityComparer())
                   .ToList();

Я не уверен, что это правильно, но всякий раз, когда я запускаю этот запрос, я получаю исключение NullReferenceException внутри метода NHibernate.Linq.Visitors.WhereArgumentsVisitor.GetCollectionContainsCriteria.

Может ли кто-нибудь помочь мне с альтернативным способом выполнения этого запроса?

1 Ответ

2 голосов
/ 18 ноября 2009

BarEqualityComparer наверняка станет точкой отказа. Для провайдера не существует простого способа перевести пользовательский класс в оператор SQL.

...