Frage

Gibt es eine Möglichkeit, SQL mit Nhibernate Icriiteria oder Abfragebericht über so zu erreichen?

select *
  from [BlogPost] b
  inner join (select blogpost_id, count(*) matchCount
                from [Tag]
                where name in ('tag X', 'tag Y')
                group by blogpost_id
             ) tagmatch 
  on tagmatch.blogpost_id = b.Id
  order by tagmatch.matchCount desc

Ziel ist es, Blog -Beiträge nach der Anzahl der passenden Tags zu bewerten, damit ein Beitrag mit beiden Tag x und Tag y Kommt über Beiträge mit nur Tag x.

Ich habe das bisher:

 DetachedCriteria
                .For<Tag>("tag")
                .Add(Restrictions.In(Projections.Property<Tag>(x => x.Name), tags.ToArray()))
                .SetProjection(Projections.Group<Tag>(t => t.BlogPost))
                    .CreateCriteria("BlogPost")
                    .SetFetchMode("BlogPost", FetchMode.Eager)
                .AddOrder(Order.Desc(Projections.RowCount()));

Die resultierende Abfrage beiträgt jedoch nicht mit Fetch bei BlogPost. Stattdessen gibt es nur die IDs zurück, was dazu führt, dass N+1 ausgewählt wird, wenn die BlogPosts werden iteriert.

public class BlogPost
{
  ...
  ISet<Tag> Tags {get; set;}
}

public class Tag
{
  BlogPost BlogPost { get; set; }
  string Name { get; set; }
}

Dies sieht nach einem ähnlichen Problem aus.

Ist das jetzt mit Nhibernate 3 möglich?

Wenn nicht, gibt es eine alternative Lösung?

Ich kann das Schema und Domänenmodell bei Bedarf ändern. Ich möchte SQL oder HQL, wenn möglich, nicht verwenden.

War es hilfreich?

Lösung

Ich weiß hier, und dieser Typ hier, Vielleicht können Sie die Idee verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top