我有一个方法可以返回建议订单列表。如果用户传递null,则忽略条件。
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;
}
}
如果我提供标准,一切正常。很好,我的意思是它检索正确的建议订单,他们都有不同的版本号。如果所有条件都为null,它将检索所有建议的订单,但版本号都是相同的。另一个开发人员正在使用UI,他正在调用上面的方法来填充所有订单的屏幕,以便用户可以选择一个进行修改。当我得到他的更新请求但我拒绝它,因为版本号与对象的实际版本不匹配。这是版本列在映射文件中的显示方式:
<version name="Version" type="Int64" generated="always" column="ORA_ROWSCN" access="property" unsaved-value="0"/>
非常感谢您的帮助!
更新:
我下载了nhprof以查看在每种情况下生成的sql查询是否不同。无论我没有通过任何标准,或者我确实提供了标准,除了where子句之外,它们完全相同。当我在db编辑器中运行每个查询时,我得到了与我的服务相同的结果。这是某种奇怪的oracle问题吗?如果我包含where子句,我会得到不同的ora_rowscn数字,否则它们都是相同的。
答案 0 :(得分:0)
当使用ANSI Sql(我正在使用oracle 10g db)时,它会出现某种问题。我将以下属性添加到我的app.config中,试图让nhibernate不使用ANSI:
<property name="use_outer_join">false</property>
然而,这没有帮助。然后我补充道:
<property name="max_fetch_depth">0</property>
现在有更多数据库命中,但版本号会按预期返回。