У меня есть метод, который возвращает список предлагаемых заказов. Если пользователь передает нулевое значение, этот критерий игнорируется.
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;
}
}
Если я предоставлю критерии, все работает нормально. Под штрафа я имею в виду, что он получает правильные предложенные заказы, и все они имеют разные номера версий. Если все критерии являются нулевыми, он получает все предложенные заказы, как и должно быть, однако номера версий все одинаковые. Другой разработчик работает над пользовательским интерфейсом и вызывает вышеуказанный метод для заполнения экрана всеми заказами, чтобы пользователь мог выбрать один для изменения. Когда я получаю его запрос на обновление, я отказываюсь, так как номер версии не соответствует фактической версии объекта. Вот как выглядит столбец версии в файле сопоставления:
<version name="Version" type="Int64" generated="always" column="ORA_ROWSCN" access="property" unsaved-value="0"/>
Большое спасибо за любую помощь!
UPDATE:
Я скачал nhprof, чтобы увидеть, был ли SQL-запрос, генерируемый в каждом случае, разным. Независимо от того, если я не отвечаю никаким критериям или я предоставляю критерии, они абсолютно одинаковы, за исключением условия where. Когда я выполнял каждый из запросов в редакторе БД, я получал те же результаты, что и у моего сервиса. Это какая-то странная проблема с оракулом? Если я включаю предложение where, я получаю разные числа ora_rowscn, в противном случае они все одинаковые.