列表和查询中的nhibernate映射属性

列表和查询中的nhibernate映射属性,nhibernate,model,mapping,properties,linq-to-nhibernate,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<It

在我的对象中有以下情况

   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开始)
n.IsCorrente在哪里
选择n).FirstOrDefault();
}             
}
私人IList_项目;
公共虚拟IList项目
{
获取{return\u Items;}
}
当我尝试查询currentItem属性时,出现“无法解析属性”异常
最佳解决方案是什么?
我需要在hbm映射文件中映射规则“where n.Iscorrente”?有一个简单的get{}属性

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

我使用的是Nhibernate 3.1,这是一个符号化的示例,但问题是一个真正的问题

real app中的Item对象是一个复杂的对象,Items集合是数据的存储状态

我已经把私人收藏,因为我使用自动地图,我必须地图

<bag name="Items" cascade="save-update" access="field.camelcase-underscore"   
jobs->currentjob等

TIA

Andrea

如果您只想读取CurrentItem,而不想将其持久化,那么您可以为您的属性使用公式

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


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

我在这里看到两个选项,您根本不映射CurrentItem并使用它

1:

公共虚拟项CurrentItem
{
获取{return Items.FirstOrDefault(item=>item.IsCurrente);}
}
公共虚拟IList项{get;private set;}
2: 一点变通办法

    public virtual Item CurrentItem
    {
        get { return Items.FirstOrDefault(); }
    }
    protected virtual IList<Item> CurrentItems { get; private set; }
公共虚拟项CurrentItem
{
获取{return Items.FirstOrDefault();}
}
受保护的虚拟IList CurrentItems{get;private set;}


希望这有助于

显然,select类型是用来检索项目集合的(例如,从Items.IDPArent=parent.id的项目中选择x、y、z)。如果我实现IUserInterface,我需要更改我的poco策略,顺便问一句,我可以用linq not HAVE查询Item属性吗?无法解析属性???Item是一个已经映射了其属性hbm文件的类,我如何用IuserType实现?您的示例类已经违反了“普通”规则策略,因为您在get中与NHibernate LINQ提供商有联系。使用映射文件填充此属性将与POCO稍微保持一致。我手头没有IUserType的实现,但在本文底部有一个开始:
    public virtual Item CurrentItem
    {
        get { return Items.FirstOrDefault(); }
    }
    protected virtual IList<Item> CurrentItems { get; private set; }