列表和查询中的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; }