2012-10-08 70 views
0

我不知道如何正確地描述它。我正在使用預先存在的域,其中某些實體可以包含版本化的子級。孩子們對自己的版本號負責,但最終,這個版本號只有在附屬父實體的情況下才有意義。NHibernate:(流利)映射/查詢基於訪問已經映射的集合屬性的Getter

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(如果它在第一個地方工作)。

回答

0

你爲什麼不這樣做:

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

查詢是在現實中比這個例子要複雜得多。這是一個大型的搜索查詢。我也是基於「博客」實體的屬性進行過濾(實際上它根本不是「博客」實體)。實際上,有更多的字段的行爲與上面的「VersionedItem」類似。 – kitsune