如何查询NHibernate的特定类型?

时间:2011-02-25 16:02:20

标签: c# nhibernate fluent-nhibernate

我正在使用Fluent NHibernate和DiscriminateSubClassesOnColumn()来支持子类化。用于区分子类的列未映射到实体上的实际属性。

如何创建仅返回给定类型实体的查询?

这是我的尝试,其中propertyName是我的识别列的名称,值是类型名称:

return _db.CreateCriteria<T>()
            .Add(Restrictions.Eq(propertyName, value))
            .List<T>();

然而,这给了我错误“无法解析属性:类型:[我的实体类型]”,这是因为实体本身没有属性。如果我将属性添加到我的实体并映射它,我会收到另一个错误:“System.IndexOutOfRangeException:此SqlParameterCollection的索引7无效,Count = 7。”

2 个答案:

答案 0 :(得分:3)

将类型传递给泛型参数T.例如,如果Cat和Dog扩展抽象类Animal:

return _db.CreateCriteria<Cat>()
        .List<Cat>();

返回所有猫

    return _db.CreateCriteria<Animal>()
        .List<Animal>();

返回猫和狗。

答案 1 :(得分:0)

您应该根据您感兴趣的子类创建一个条件。例如,如果您的实体层次结构包含从EntityA派生的EntityB,并且您只需要EntityB:

session.CreateCriteria<EntityB>().List();

你将获得实体B类型的所有实体。没有理由明确地处理鉴别器。