У меня есть метод, который вернет список предлагаемых заказов. Если пользователь передает null, критерии игнорируются.Проблема с версией Nhibernate
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. Когда я запускал каждый из запросов в редакторе db, у меня были те же результаты, что и у меня на службе. Это какая-то странная проблема оракула? Если я включаю предложение where, я получаю разные числа ora_rowscn, в противном случае они все одинаковы.
Как ваша стратегия в каскаде? Вы уверены, что не выполняете какое-либо обновление элемента? Generated = "always" будет увеличивать столбец версии для каждой операции записи. Если вы не уверены в попытке зарегистрировать сгенерированный sql и искать любое нежелательное обновление этого элемента. – zoidbeck
Я не задал параметр каскада в любом из моих файлов сопоставления. Для любых коллекций я использую много-к-одному. Я использовал NHProf, не видел никаких неожиданных обновлений, просто выберите. Как указано выше. Если я запускаю выборки по БД, я получаю те же результаты. Я думаю, что это странная проблема оракула. –