使用父ID的NHibernate子项查询

时间:2010-03-15 21:39:15

标签: c# nhibernate fluent-nhibernate

所以我有一个类似这个问题的设置: Parent Child Setup

保存父母和子女时,一切都很有效。

但是,我在选择孩子时似乎有问题。我似乎无法让所有的孩子都有一个特定的父母。

这失败了:NHibernate.QueryException:无法解析属性:ParentEntity_id:Test.Data.ChildEntity

这是我的代码:

    public IEnumerable<ChildEntity> GetByParent(ParentEntity parent)
    {
        using (ISession session = OrmHelper.OpenSession())
        {

            return session.CreateCriteria<ChildEntity>().Add(Restrictions.Eq("ParentEntity_id ", parent.Id)).List<ChildEntity>();
        }
    }

任何有助于建立适当功能以获取所有物品的帮助都将受到赞赏。

哦,我正在使用Fluent NHibernate来构建映射 - 版本1 RTM和NHibernate 2.1.2 GA

如果您需要更多信息,请与我们联系。

根据您的要求,我的流利映射:

            public ParentEntityMap()
    {
        Id(x => x.Id);          
        Map(x => x.Name);           
        Map(x => x.Code).UniqueKey("ukCode");
        HasMany(x => x.ChildEntity).LazyLoad()
            .Inverse().Cascade.SaveUpdate();
    }

    public ChildEntityMap()
    {
        Id(x => x.Id);
        Map(x => x.Amount);
        Map(x => x.LogTime);
        References(x => x.ParentEntity);                
    }

映射到以下2个表:

CREATE TABLE "ParentEntity" (
Id  integer,
Name TEXT, 
Code TEXT,
primary key (Id),
unique (Code)
)

CREATE TABLE "ChildEntity" (
Id  integer,
Amount NUMERIC,
LogTime DATETIME,
ParentEntity_id INTEGER, 
primary key (Id)
)

SQLite中的数据存储。

2 个答案:

答案 0 :(得分:1)

return session.CreateCriteria<ChildEntity>()
  .Add(Restrictions.Eq("ParentEntity", parent))
  .List<ChildEntity>();

只需使用父母本身。

答案 1 :(得分:0)

在您的标准中,您不应该引用列名,而是引用属性名。将“ParentEntity_id”更改为“ParentEntity.Id”,这应解决它。