NHibernate.QueryException消息:关联路径重复



我有这样的代码:

if (pertinentDataExists) {        
    List<Entity> operatorList = new List<Operator>();
    List<Entity> newOperatorList = criteria.newOperatorList;
    foreach (Operator operator in operatorList)
    {
        operatorList.Add(operator);
    }
    queryCriteria.CreateCriteria("OperatorList").Add(Restrictions.In("Operator", operatorList));
}

,然后:

if (otherPertinentDataExists) {
    Object[] objects = new Object[criteria.newRoleTypeList.Count];                                                                                                                
    for (int  = 0; i < criteria.RoleTypeList.Count; i++) {                                                                                       
        objects[i] = criteria.RoleTypeList[i].Id;   
    }                                                                                       
    queryCriteria.CreateCriteria("OperatorList").Add(Restrictions.In("Role", objects));
}

这些单独工作很好。但是,如果两种情况都有要添加到列表中的条件,则得到:

NHibernate。QueryException消息:重复的关联路径:OperatorList

如果已经创建了条件,我如何为Role添加限制?

有两种选择。首先,如果可能的话(在同一个方法中),创建Criteria并将其作为局部变量引用:

var operatorListCriteria = queryCriteria.CreateCriteria("OperatorList");
if ( myCondition1 )
{
  operatorListCriteria.Add(...
}
if ( myCondition2 )
{
  operatorListCriteria.Add(...
}

第二,使用"alias"创建条件,然后,稍后,在任何地方,您都可以使用GetCriteriaByAlias(aliasPath)找到它们:

var aliasPath = "OperatorListAlias";
var operatorListCriteria = queryCriteria.CreateCriteria("OperatorList", aliasPath);
...
// later find them by aliasPath
var subCriteria = queryCriteria.GetCriteriaByAlias(aliasPath);

注意:还要检查GetCriteriaByPath(associationPath)

相关内容

最新更新