代码之家  ›  专栏  ›  技术社区  ›  JDH

Nhibernate版本控制问题

  •  0
  • JDH  · 技术社区  · 15 年前

    我有一个方法可以返回建议订单的列表。如果用户传递空值,则忽略该条件。

    public IList<SuggestedOrderItem> GetSuggestedOrderItemByCriteria
            (
                int? itemNumber,
                int? deptNumber            
            )
        {
            try
            {
                NHibernate.ICriteria criteria = NHibernateSession.CreateCriteria(typeof(Core.SuggestedOrderItem));
    
                if (itemNumber.HasValue)
                    criteria.CreateCriteria("Item", "Item").Add(Expression.Eq("Item.ItemNumber", itemNumber.Value));
    
                if (deptNumber.HasValue)
                    criteria.CreateCriteria("Item.Department", "Department").Add(Expression.Eq("Department.DepartmentNumber", deptNumber.Value));
    
                return criteria.List<Core.SuggestedOrderItem>();
            }
            catch (NHibernate.HibernateException he)
            {
                DataAccessException dae = new DataAccessException("NHibernate Exception", he);
                throw dae;                
            }
    
        }
    

    如果我提供一个标准,一切正常。我的意思是它检索正确的建议订单,它们都有不同的版本号。如果所有条件都为空,它将检索所有建议的订单,但版本号都是相同的。另一个开发人员正在处理UI,他正在调用上面的方法来填充包含所有订单的屏幕,以便用户可以选择要修改的订单。当我收到他的更新请求时,尽管我拒绝了它,因为版本号与对象的实际版本不匹配。以下是“版本”列在映射文件中的外观:

    <version name="Version" type="Int64" generated="always" column="ORA_ROWSCN" access="property" unsaved-value="0"/>
    

    更新:

    1 回复  |  直到 15 年前
        1
  •  0
  •   JDH    15 年前

    当使用ANSI Sql时,会出现一些问题(我遇到的是oracle 10g db)。我将以下属性添加到我的app.config中,以尝试使nhibernate不使用ANSI:

    <property name="use_outer_join">false</property>
    

    然而,这没有帮助。我接着补充说:

    <property name="max_fetch_depth">0</property>