【问题标题】:How to query NHibernate for specific type?如何查询 NHibernate 的特定类型?
【发布时间】:2011-02-25 16:02:19
【问题描述】:

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

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

这是我的尝试,其中 propertyName 是我的区分列的名称,value 是类型名称:

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

但是,这给了我错误“无法解析属性:类型:[我的实体类型]”,这是因为实体本身没有该属性。如果我将该属性添加到我的实体并对其进行映射,我会收到另一个错误:“System.IndexOutOfRangeException : Invalid index 7 for this SqlParameterCollection with Count=7.”

【问题讨论】:

    标签: c# nhibernate fluent-nhibernate


    【解决方案1】:

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

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

    返回所有猫

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

    返回猫和狗。

    【讨论】:

      【解决方案2】:

      您应该只根据您感兴趣的子类创建一个条件。例如,如果您的实体层次结构包含从 EntityA 派生的 EntityB,而您只希望 EntityB 这样做:

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

      您将获得实体 B 类型的所有实体。没有理由显式处理鉴别器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-26
        • 2023-03-18
        相关资源
        最近更新 更多