如何查询NHibernate的特定类型?

发布于 2024-10-19 12:16:32 字数 479 浏览 1 评论 0原文

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

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

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

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

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

I'm using Fluent NHibernate with DiscriminateSubClassesOnColumn() to support subclassing. The column used to discriminate between subclasses is not mapped to an actual property on the entity.

How do I create a query which returns only entities of a given type?

Here's my try, where propertyName is the name of my discriminating column and value is the type name:

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

However this gives me the error "could not resolve property: Type of: [my entity type]", which is because the entity itself doesn't have the property. If I add the property to my entity and map it I get another error: "System.IndexOutOfRangeException : Invalid index 7 for this SqlParameterCollection with Count=7."

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

琉璃繁缕 2024-10-26 12:16:32

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

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

返回所有 Cats,

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

返回 Cats 和 Dogs。

You pass the type to the generic parameter T. For example, if Cat and Dog extend abstract class Animal:

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

returns all Cats

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

returns Cats and Dogs.

情话难免假 2024-10-26 12:16:32

您应该根据您感兴趣的子类创建一个条件。例如,如果您的实体层次结构包含从 EntityA 派生的 EntityB,并且您只希望 EntityB 执行以下操作:

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

您将获得实体 B 类型的所有实体。没有理由明确地研究判别器。

You should just create a criteria based on the subclass you are interested in. For example if your entity hierarchy contains EntityB derived from EntityA, and you just want EntityB just do:

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

and you will get all the entities of type entity B. No reason on working on the discriminator explicitly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文