Orchardcms 在Orchard服务中调用SQL查询

Orchardcms 在Orchard服务中调用SQL查询,orchardcms,Orchardcms,在我的Orchard模块(这里称为“MyModule”)中,我需要查询一个数据集,该数据集由若干个循环回原始表的联接组成,以便为指定成员构建朋友列表 我用适当的部分定义了两个ContentItem(为了清晰起见省略了其他内容) 好友项上的CommonPart用于保存对该好友所属成员的引用。FriendPart还包含一个指向成员记录的指针引用 我可以使用三个ContentManager.GetMany()调用在服务中表示此查询,但在Orchard服务中需要一些代码来完成此操作 我要查找的数据集最简

在我的Orchard模块(这里称为“MyModule”)中,我需要查询一个数据集,该数据集由若干个循环回原始表的联接组成,以便为指定成员构建朋友列表

我用适当的部分定义了两个ContentItem(为了清晰起见省略了其他内容)

好友项上的CommonPart用于保存对该好友所属成员的引用。FriendPart还包含一个指向成员记录的指针引用

我可以使用三个ContentManager.GetMany()调用在服务中表示此查询,但在Orchard服务中需要一些代码来完成此操作

我要查找的数据集最简单的表述是SQL:

SELECT DISTINCT memberFriend.Id
  FROM MyModule_MemberPartRecord member
    INNER JOIN Common_CommonPartRecord common
        ON member.Id = common.Container_id
    INNER JOIN MyModule_FriendPartRecord friend
        ON common.Id = friend.Id
    INNER JOIN MyModule_MemberPartRecord memberFriend
        ON friend.Member_Id = memberFriend.Id
    WHERE member.Id = {parameter}
工作非常好,编码更紧凑

我的问题:如何在Orchard中调用SQL查询?我是否将SQL保存为数据库视图并调用它?还是我要建立一个命令并调用它

在Orchard 1.8.1中,在服务中执行SQL查询的适当方式是什么

private readonly ISessionLocator _sessionLocator;
public Class(ISessionLocator sessionLocator) {
    _sessionLocator = sessionLocator;
}

public void SQL(string sql) {
    var session = _sessionLocator.For(typeof(object));
    session.CreateSQLQuery(sql);
    var list = session.List();
}
您还需要从Orchard的lib文件夹添加对NHibernate的引用


您看过ContentManager API上的.Query或.HqlQuery了吗?你可以在那里做所有这些连接,应该没问题。也许。或者使用HQL本身()。这有一些非常好的语法,只要在模型中显式映射关系,就可以很容易地连接内容。但是,是的,有时候SQL只是一个方便的选项^ ^

对所讨论的API进行了很好的总结。我正在使用查询API。我将研究HqlQuery。事实上,HQL应该可以在两次数据库点击时完美工作。
ISessionLocator
已经过时,应该被
ITransactionManager.GetSession
取代。
private readonly ISessionLocator _sessionLocator;
public Class(ISessionLocator sessionLocator) {
    _sessionLocator = sessionLocator;
}

public void SQL(string sql) {
    var session = _sessionLocator.For(typeof(object));
    session.CreateSQLQuery(sql);
    var list = session.List();
}