0

次の SQL ステートメントの nhibernate (バージョン 3.3) クエリ (基準?) の構文は次のとおりです。

SELECT DISTINCT usr.* FROM User usr, User_SecurityGroup grp, SecurityGroup_Permission prm, Permission org 
WHERE usr.Id = grp.User_id AND grp.SecurityGroup_id = prm.SecurityGroup_id AND org.Id = prm.Permission_id 
AND org.Site_id IN (1,2,3) AND org.PermRead = 1 AND usr.Active = 1 AND org.Active = 1;

このようなタスクを完了するために、テーブルと基準構文の間で結合がどのように行われるかはわかりません。

この特定のクエリでは、サイト ID のリストが渡されます

また、「org.PermRead=1」という条件で、プロパティ名が動的になります。「PermWrite」の可能性があります。

編集:わかりましたので、これは私がこれまでに持っているものです

        ICriteria criteria = this.Session.CreateCriteria<User>();

        criteria.Add(Restrictions.In("User.Site", siteList.ToArray()));
        criteria.Add(Restrictions.Eq("User.Active", true));
        criteria.Add(Restrictions.Eq("Site.Active", true));
        criteria.Add(Restrictions.Eq(Enum.GetName(typeof(Perm.Types), access), true));

        criteria.SetResultTransformer(Transformers.DistinctRootEntity);
        return criteria.List<User>();

結合は次のような形式になると思います。

        criteria.CreateAlias("Sites", "Sites", NHibernate.SqlCommand.JoinType.LeftOuterJoin); 
4

2 に答える 2

0

私はこれで終わった:

       ICriteria criteria = Session.CreateCriteria<User>()
            .CreateAlias("SecurityGroups", "SecurityGroups")
            .CreateAlias("SecurityGroups.Permissions", "Permissions")
            .Add(Restrictions.Eq("Permissions.Active", true))
            .Add(Restrictions.Eq("Active", true))
            .Add(Restrictions.In("Permissions.Site", ids.ToArray()))
            .Add(Restrictions.Eq("Permissions.Perm" + Enum.GetName(typeof(Perm.Types), accessRight), Perm.Level.Allow));
        return criteria.List<User>();
于 2012-11-30T09:00:42.180 に答える
0
ICriteria criteria = Session.CreateCriteria<User>()
    .Add(Restrictions.Eq("Active", true))
    .CreateCriteria("Sites", "Site"); 
        .Add(Restrictions.In("Id", siteList.ToArray()))
        .Add(Restrictions.Eq("Active", true))
        .Add(Restrictions.Eq(access.ToString(), true))

return criteria.List<User>();
于 2012-11-28T09:38:47.807 に答える