C# 重命名NHibernate标准

C# 重命名NHibernate标准,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,我尝试多次加入别名,但这取决于它应该加入别名的次数 Employee employeeAlias = null; Thing thingAlias = null; var names = string[] {"A", "B", "C", "D", "E"} // number of values could vary for(int i = 0; i < names.Length ; i++) { queryOver .JoinAlias(() => employ

我尝试多次加入别名,但这取决于它应该加入别名的次数

Employee employeeAlias = null;
Thing thingAlias = null;
var names = string[] {"A", "B", "C", "D", "E"} // number of values could vary
for(int i = 0; i < names.Length ; i++)
{
   queryOver
       .JoinAlias(() => employeeAlias.Things, 
                  () => thingAlias,
                  JoinType.LeftOuterJoin, 
                  Restrictions.Eq(Projections.Property(() => thingAlias.Name, 
                                  names[i]));
}

你想达到的目标是不可能的。每个关系(
多对一
一对多
)可以只使用一次

要支持此声明,请在此处勾选:

因此,我们在这里可以看到,不管别名如何,最后,所有关联关系(联接)都被添加到
associationPathCriteriaMap
,即
IDictionary


这意味着,现在有一种方法可以让两个相同的键在游戏中……

我没有尝试过这个,但我认为我们可以(不确定,但万一你没有尝试过)使用
限制,而不是使用
for loop
Restrictions.Eq
-

Restrictions.In(Projections.Property(() => thingAlias.Name, names));

请看一下我上一次的编辑。。你知道我怎么在nhibernate做吗?我之前问这个问题的原因是因为我认为这种方法是实现我想要的sql脚本的正确方法。您需要使用WHERE来过滤它们。我的意思是有东西1,东西2,东西3,然后你可以根据需要加入他们。检查属性
的位置
,但这是否意味着我将对其进行硬编码?联接的数量是动态的。铁路超高硬编码件1、件2、件3..:(确实如此。但这是NHibernate的解决方案。它就是这样设计的。如果你想在查询1)关系必须存在2)只能使用一次。但我想说,问题是:你为什么需要它?用于过滤?然后你应该改变方法,使用
I.
子查询(你可以有很多子查询),然后用它们的结果过滤
II.
根查询。。。也许在我演示如何使用子查询的地方检查这个答案。。。非常严重;)有点我想检查这些行的名称column中是否包含某个值。这就是为什么我对这些值中的每一个都使用左外连接。我想将每个名称投影到一列中:(
private void CreateAssociationPathCriteriaMap()
{
    foreach (CriteriaImpl.Subcriteria crit in rootCriteria.IterateSubcriteria())
    {
        string wholeAssociationPath = GetWholeAssociationPath(crit);
        try
        {
            associationPathCriteriaMap.Add(wholeAssociationPath, crit);
        }
        catch (ArgumentException ae)
        {
            throw new QueryException("duplicate association path: "
                                    + wholeAssociationPath, ae);
        }
Restrictions.In(Projections.Property(() => thingAlias.Name, names));