来自列表和查询的nhibernate映射属性

时间:2011-04-21 15:38:26

标签: nhibernate model mapping properties linq-to-nhibernate

我的对象中存在以下情况

   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属性时,我有“无法解析属性”异常
什么是最好的解决方案?
我需要在hbm映射文件中映射规则“where n.Iscorrente”?有一个简单的get {}属性???

或者我必须更改查询模式以包含集合?

我正在使用Nhibernate 3.1,这是一个愚蠢的样本,但问题是一个真正的问题。

真实应用中的Item对象是一个复杂的对象,而Items集合是数据的storical情况。

我已将私人收藏放入我使用的自动播放器,我必须映射

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

让一个属性从嵌套集合中呈现单个对象的最佳解决方案是什么?

像Person-&gt; jobs-&gt; currentjob等等

TIA
安德烈

2 个答案:

答案 0 :(得分:0)

如果您只是想阅读CurrentItem并且不想保留它,那么您可以使用您的财产的公式。

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

这种方法的唯一方法是你必须让Item实现IUserType接口。

答案 1 :(得分:0)

我在这里看到两个选项,你根本不会映射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; }

希望有所帮助