【问题标题】:NHibernate: (Fluent) Mapping / Querying based upon a Getter that accesses an already mapped collection propertyNHibernate:(流利)基于访问已映射集合属性的 Getter 映射/查询
【发布时间】:2012-09-28 21:38:56
【问题描述】:

我不知道如何正确表达。我正在使用一个预先存在的域,其中某些实体可以包含版本化的子项。子级负责自己的版本号,但最终,此版本号仅在附加的父实体的上下文中才有意义。

public class Blog
{
    public virtual IList<VersionedItem> VersionedItems { get; set; }
    public virtual CurrentVersionedItem {
        get {
            return VersionedItems.OrderByDescending(x => x.Version).FirstOrDefault();
        }

    }
}

public class VersionedItem
{
    public virtual Blog { get;set; }
    public virtual int Version { get; set; }
    public virtual string Content { get; set; }
    public virtual int SomeNumber { get; set; }
}

以及我想要实现的目标:

var blogs = Session.Query<Blog>(x=> x.CurrentVersionedItem.SomeNumber == 5)

虽然 NHibernate 的 IQueryable 提供者很宽容,但我不会吃任何东西。有没有办法定义正确解析“CurrentVersionedItem”属性的(流利的)映射?

我也知道 CurrentVersionedItem 在这种情况下可能会返回 null (如果它首先工作的话)。

【问题讨论】:

    标签: c# nhibernate orm fluent-nhibernate mapping


    【解决方案1】:

    你为什么不这样做:

    var item = session.Query<VersionedItem>().FirstOrDefault(q => q.SomeNumber == 5);
    Blog blog;
    if (item != null)
        blog = item.Blog;
    

    【讨论】:

    • 查询实际上比这个例子复杂得多。这是一个大型搜索查询。我还根据“博客”实体(实际上根本不是“博客”实体)的属性进行过滤。事实上,还有更多字段的行为类似于上面的“VersionedItem”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2015-05-02
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    相关资源
    最近更新 更多