NHibernate:HasMany组件和Where / Contains子句

时间:2009-10-12 01:57:18

标签: linq nhibernate components contains

我正在尝试使用Linq to 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的Bar集合被映射为一对多组件集合。

现在我想运行一个看起来像这样的查询:

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

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

我不确定这是否正确,但每当我运行此查询时,我都会从名为NHibernate.Linq.Visitors.WhereArgumentsVisitor.GetCollectionContainsCriteria方法的方法中获取NullReferenceException。

有没有人可以帮我解决运行此查询的其他方法?

1 个答案:

答案 0 :(得分:2)

BarEqualityComparer肯定会成为失败的关键。提供程序没有简单的方法将自定义类转换为SQL语句。