【问题标题】:I am getting a "duplicate association path" error in the NHibernate Criteria when accessing the same table twice两次访问同一个表时,NHibernate Criteria 中出现“重复关联路径”错误
【发布时间】:2010-10-07 11:47:31
【问题描述】:

我有一个 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 解决这个问题?

谢谢

【问题讨论】:

    标签: .net nhibernate criteria


    【解决方案1】:

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

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

    【讨论】:

    • “Color”和“Fancy Color”是具有不同链接表的两个独立属性。
    • 无论如何 Nhibernate 说您在同一关联路径上创建了两个不同的条件。意味着你不能在同一个属性上使用两个 CreateCriteria
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 2012-12-06
      • 1970-01-01
      相关资源
      最近更新 更多