当两次访问同一个表时,我在NHibernate Criteria中收到“重复关联路径”错误

时间:2010-10-07 11:47:31

标签: .net nhibernate criteria

我有一个CreateCriteria,它使用不同的别名将连接添加到同一个表中两次:

aCriteria.CreateCriteria("Color", "co").Add(Expression.In("co.ColorId", bikush.Color.Select(x => x.ColorId).ToList()));

aCriteria.CreateCriteria("Color","fco").Add(Expression.In("fco.ColorId",bikush.FCColor.Select(x => x.ColorId).ToList()));

我收到错误“重复关联路径”

这是我想要生成的SQL:

SELECT b.BikushId, c.[Name] AS PlainColor, fc.[Name] AS FancyColor FROM Bikush b INNER JOIN BikushInColor clt ON clt.BikushId = b.BikushId INNER JOIN Color c ON clt.ColorId = c.ColorId INNER JOIN BikushInFCColor bifc ON b.BikushId = bifc.BikushId INNER JOIN Color fc ON bifc.ColorId =fc.ColorId

有没有使用Nhibernate的CriteriaApi?

由于

2 个答案:

答案 0 :(得分:0)

如果我理解正确,那么你应该将两个电话合并为一个:

    Criteria.CreateCriteria("Color", "co")
            .Add(Expression.In("co.ColorId", bikush.Color.Select(x => x.ColorId).ToList()));
            .Add(Expression.In("co.ColorId", bikush.FCColor.Select(x => x.ColorId).ToList()));

答案 1 :(得分:0)

别名是属性,而不是表名。尝试:

aCriteria.CreateCriteria("Color", "co").Add(Expression.In("co.ColorId", bikush.Color.Select(x => x.ColorId).ToList()));  
aCriteria.CreateCriteria("FancyColor","fco").Add(Expression.In("fco.ColorId",bikush.FCColor.Select(x => x.ColorId).ToList()));