【问题标题】:nhibernate map property from list and query over从列表中休眠地图属性并查询
【发布时间】:2011-08-10 10:11:13
【问题描述】:

我的对象中有以下情况

   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集合是数据的历史情景。

我已经放了私人收藏,因为我使用自动映射器,我必须映射

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

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

Person->jobs->currentjob 之类的东西

TIA
安德烈亚

【问题讨论】:

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


    【解决方案1】:

    如果您只想阅读 CurrentItem 而不想保留它,那么您可以为您的属性使用公式。

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

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

    【讨论】:

    • 显然这种选择是为了检索项目集合而实现的(例如,从 ITEMS.IDPArent=parent.id 的 ITEMS 中选择 x,y,z)。如果我实现 IUserInterface 我需要更改我的 poco 策略,顺便说一句,我可以查询没有 linq 的 Item 属性无法解析属性???
    • Item 是一个已经映射到他的属性 hbm 文件的类,我如何用 IuserType 实现??
    • 您的示例类已经违反了“普通”策略,因为您在获取中与 NHibernate LINQ 提供程序有联系。使用映射文件填充此属性将与 POCO 稍微对齐。我没有方便的 IUserType 实现,但在这篇文章的底部有一个开头:ayende.com/Blog/archive/2008/07/31/…
    【解决方案2】:

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

    希望有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 1970-01-01
      相关资源
      最近更新 更多