Свойство карты nhibernate из списка и запрос - PullRequest
1 голос
/ 21 апреля 2011

У меня в объектах следующая ситуация

   public virtual Item CurrentItem 
    {
        get 
        {
            return (from n in Items
                    where n.IsCorrente
                    select n).FirstOrDefault();
        }             
    }

 private IList<Item > _Items;
        public virtual IList<Item> Items
        {
            get { return _Items; }
        }

когда я пытаюсь запросить свойство currentItem, у меня возникает исключение «не удалось разрешить свойство»
какое лучшее решение?
Мне нужно сопоставить правило "где n.Iscorrente" в файле карты HBM? иметь простое свойство get {} ???

или мне нужно изменить режим запроса, чтобы включить коллекцию ??

Я использую Nhibernate 3.1, это семплический пример, но проблема - реальная проблема.

Объект Item в реальном приложении представляет собой сложный объект, а коллекция Items представляет собой историческую ситуацию с данными.

Я поместил частную коллекцию, потому что я использую automapper, и мне нужно отобразить

<bag name="Items" cascade="save-update" access="field.camelcase-underscore"   

Как лучше всего иметь свойство, представляющее отдельный объект из вложенной коллекции?

Что-то вроде Person-> jobs-> currentjob и т. Д.

ТИА
Andrea

Ответы [ 2 ]

0 голосов
/ 20 мая 2011

Я вижу здесь два варианта, когда вы вообще не отображаете CurrentItem и используете

1:

    public virtual Item CurrentItem
    {
        get { return Items.FirstOrDefault(item => item.IsCurrente); }
    }
    public virtual IList<Item> Items { get; private set; }

2: небольшое решение

    public virtual Item CurrentItem
    {
        get { return Items.FirstOrDefault(); }
    }
    protected virtual IList<Item> CurrentItems { get; private set; }

Надеюсь, это поможет

0 голосов
/ 21 апреля 2011

Если вы просто хотите прочитать CurrentItem и не хотите сохранять его, тогда вы можете использовать формулу для своего свойства.

<property name="CurrentItem" type="Example.Item, Example" formula="(SELECT * FROM Items WHERE IsCorrente = 'y')" />

Единственный недостаток этого подхода - использование Item для реализации интерфейса IUserType.

...