views:

53

answers:

2

I have a CreateCriteria that adds a join to the same table twice with different aliases:

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()));

I'm getting the error "duplicate association path"

Here is the SQL I want to generate:

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

Is there anyway around this using the CriteriaApi of Nhibernate?

Thanks

A: 

If I understand correctly, then you should merge thies two calls in one:

    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()));
Sly
"Color" and "Fancy Color" are two seperate properties with different linked tables.
Eitan
Anyway Nhibernate says that you have created two different criteria on the same association path. Means that you cant use two CreateCriteria on the same property
Sly
A: 

The alias is for the property, not the table name. Try:

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()));
Jamie Ide