【问题标题】:NHibernate.QueryException Message : duplicate association pathNHibernate.QueryException 消息:重复的关联路径
【发布时间】:2013-01-03 22:08:22
【问题描述】:

我有这个代码:

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 消息:重复关联路径: 运算符列表

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

【问题讨论】:

  • 看起来你可以用GetCriteriaByPath("OperatorList")检查它是否已经存在

标签: c# nhibernate


【解决方案1】:

有两种选择。首先,如果可能(使用相同的方法),创建 Criteria 并将它们作为局部变量引用:

var operatorListCriteria = queryCriteria.CreateCriteria("OperatorList");

if ( myCondition1 )
{
  operatorListCriteria.Add(...
}
if ( myCondition2 )
{
  operatorListCriteria.Add(...
}

第二个,使用“别名”创建条件,然后在任何地方,您都可以使用GetCriteriaByAlias(aliasPath) 找到它们:

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

注意:同时检查GetCriteriaByPath(associationPath)

【讨论】:

  • 我不确定您所说的“a 同时检查 GetCriteriaByPath(associationPath)”是什么意思 我必须同时检查 aliasPath 和 assocationPath 吗?还是只检查其中一项是必要的?
  • 我不太清楚:我想说,您也可以使用GetCriteriaByPath,这是搜索现有子标准的另一种方式。所以你可以同时使用它们(GetCriteriaByAliasGetCriteriaByPath)......取决于哪个更适合你
猜你喜欢
  • 2011-12-20
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-10
相关资源
最近更新 更多