2016-04-26 5 views
0

私は、以下の条件UserRolesPartRecordがOrchard CMSのContentPartRecordから派生していないのはなぜですか?

  1. で一部のユーザーを照会するIContentManagerを使用したい私は簡単に条件1を実装することができますが、私は見つけることができませんIContentManager.Query(VersionOptions)を使用することにより、特定の役割

  • メンバーを発表他のすべての汎用拡張メソッドとして条件2を実装する方法は、ContentPartRecordから派生したレコードクラスに制限されています。

    ContentPartRecordから派生したものではないUserRolesPartRecordの理由はありますか?コンテンツマネージャーのクエリでそれを使用できないのはなぜですか?

  • 答えて

    1

    これは古いためです。最後にユーザーに対して複雑なクエリを実行しなければならなかったので、私はContentManager.QueryではなくHQLに頼らざるを得ませんでした。これらのブログ記事を確認してください:https://weblogs.asp.net/bleroy/querying-orchard-in-hqlhttps://weblogs.asp.net/bleroy/joining-orchard-part-records-in-hqlhttps://weblogs.asp.net/bleroy/getting-orchard-content-items-out-of-hql最終結果は次のようになります。

    var session = _sessionLocator.For(typeof (UserPartRecord)); 
    
    const string fromTables = 
        "FROM Orchard.ContentManagement.Records.ContentItemVersionRecord ItemVersion" 
        + " JOIN ItemVersion.ContentItemRecord Item" 
        + " JOIN Item.UserPartRecord User" 
        + " WHERE ItemVersion.Published = true" 
        + " AND User.UserName IS NOT NULL"; 
    const whereClause = 
        "User.Id NOT IN (SELECT Role.UserId FROM Orchard.Roles.Models.UserRolesPartRecord Role)"; 
    const orderBy = "ORDER BY User.UserName"; 
    
    var pageQuery = session.CreateQuery(
        "SELECT DISTINCT User.Id, User.UserName " 
        + fromTables 
        + " AND " + whereClause 
        + " " + orderBy) 
        .SetFirstResult(pager.GetStartIndex()) 
        .SetMaxResults(takeNum); 
    
    var ids = pageQuery.List<int>(); 
    
    var results = contentManager 
        .GetMany<UserPart>(ids, VersionOptions.AllVersions, QueryHints.Empty); 
    
    関連する問題