Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > функция FindOne


Автор: Martin_8 18.7.2010, 00:33
Здравствуйте.
Я пытаюсь разбираться с NHibernate. Помогите, пожалуйста, понять, почему функция FindOne в моём коде не возвращает значения ? (хотя в criterion данные имеются)
Код

public virtual  Category GetCategoryBySku(string sku)
        {
            ICriterion criterion = Restrictions.Eq(Reflector.GetPropertyName<Category>(x => x.Sku), sku);
            var a = FindOne(criterion);         // Ошибка здесь, в "a" ничего не заносится, хотя в criterion данные есть
            return a;
           //return this.FindOne(criterion);   // Ошибка здесь, ничего не возвращается, хотя в criterion данные есть 
        }


А вот, что я вижу при отладке

http://xmages.net/show.php/1610729_findone-jpg.html

Подскажите, как должен выглядеть код, чтобы метод возвращал значение.

Автор: fvoice 19.7.2010, 11:21
судя по описанию, в наборе данных нет объекта Category у которого поле Sku равно параметру sku("22")

Вы наверное используете Rhino Mocking NHibernate?
я в нем не силен, возможно здесь вы найдете описние интерисующей функции http://codeclimber.net.nz/archive/2007/06/20/Rhino-Mocking-NHibernate-Expressions.aspx

учитывая описание FindOne:
"The FindOne repository method builds a NHibernate Criteria and calls its UniqueResult method."
в стандартном хибернейте можно сделать так:
Код

ICriteria firstObject = session.CreateCriteria(typeof(T));

//добавляем какие то условия

T result = firstObject.UniqueResult<T>();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)