Я получаю сообщение об ошибке «Дубликат пути ассоциации» в критериях NHibernate при двойном доступе к одной и той же таблице - PullRequest
1 голос
/ 07 октября 2010

У меня есть 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

Есть ли что-нибудь подобное, используя CriteriaApi Nhibernate?

Спасибо

Ответы [ 2 ]

0 голосов
/ 07 октября 2010

Псевдоним для свойства, а не имени таблицы.Попробуйте:

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()));
0 голосов
/ 07 октября 2010

Если я правильно понимаю, то вы должны объединить эти два вызова в один:

    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()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...