QueryException:重复的关联路径

时间:2011-11-16 03:34:00

标签: asp.net-mvc-3 nhibernate join fluent-nhibernate queryover

我有这样的要求:

要求1)

select * from BigTable

1) Where BigTable.User.FullName = XYZ
2) Where BigTable.Network.Name = XYZ

用户和网络是由FK链接的单独表格。如上所述有两种类型的选项。这实际上用于搜索。

要求2)

1) Order By BigTable.User.FullName ASC/DESC
2) Order By BigTable.Network.Name ASC/DESC

加载搜索后,应根据用户喜欢的数据对任何一个选项进行排序。

我希望实现一个更精确的代码,我不必复制许多JoinQueryOver代码,只是为了处理加载作为当前实体加入的实体的各种场景;因此,我正在使用JoinAlias,以便通过整个代码执行实现标准化实现。请注意,如果可能的话,我不想依赖HQL。

出于某种原因,我无法将我的逻辑转发到NHibernate编码中。请参阅以下内容:

var Query = session.QueryOver<BigTable>();

User funny = null;

Query.JoinAlias(x => x.User, () => funny).Where(() => funny.Full_Name.IsInsensitiveLike("%" + SearchTextFilter + "%"));

return Query.OrderByAlias(() => funny.Full_Name).Desc
                                .Skip(skip)
                                .Take(take)
                                .List<MasterLicensee>();

我收到此错误:[QueryException:重复关联路径:用户]

知道我输错了什么或者什么? :)

修改

我的想法是将它们分开,以解决所涉及的许多可能情况。

意思是:

要求1)按用户的FullName搜索。

然后,

要求2)按网络名称排序。

根据这两项要求,我们可以选择:

  • 要求1)选项1要求2)选项1
  • 要求1)选项1要求2)选项2&lt;&lt;&lt;这些是问题
  • 要求1)选项2要求2)选项1
  • 要求1)选项2要求2)选项2&lt;&lt;&lt;这些是问题

使用代码编写将是乏味和丑陋的。所以我的想法是将它们分成几个部分。

混合使用不同的必需连接,例如:

select * from BigTable Where BigTable.User.FullName = XYZ Order By BigTable.Network.Name ASC/DESC

如何将其纳入NHibernate查询?请协助

1 个答案:

答案 0 :(得分:0)

在回答你的主要问题时,我认为你的问题是,因为你没有像GertArnold所说的那样链接,你实际上是在两次创建相同的Alias。

JoinAlias and OrderByAlias命令映射到Criteria的{​​{1}}命令,这意味着您将指定两次相同的别名。因此,我们会讨论您的问题here

因此,尝试链接命令,以便您只指定一次别名,并查看是否可以解决问题。