在 Orchard 服务中调用 SQL 查询
Calling a SQL query in Orchard service
在我的 Orchard 模块(此处称为 "MyModule")中,我需要查询一个数据集,该数据集由多个连接组成,循环回原始 table 以构建朋友列表指定成员。
我用适当的部分定义了两个 ContentItem(为清楚起见省略了其他部分)
Member item => MemberPart, etc.
Friend item => FriendPart, CommonPart
Friend 项上的 CommonPart 用于保存对该 Friend 所属的 Member 的引用。 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 本身 (good intro here)。这有一些非常友好的语法,只要在模型中明确映射关系,就可以非常轻松地连接内容。但是,是的,有时 SQL 只是方便的选择 ^_^
在我的 Orchard 模块(此处称为 "MyModule")中,我需要查询一个数据集,该数据集由多个连接组成,循环回原始 table 以构建朋友列表指定成员。
我用适当的部分定义了两个 ContentItem(为清楚起见省略了其他部分)
Member item => MemberPart, etc.
Friend item => FriendPart, CommonPart
Friend 项上的 CommonPart 用于保存对该 Friend 所属的 Member 的引用。 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 本身 (good intro here)。这有一些非常友好的语法,只要在模型中明确映射关系,就可以非常轻松地连接内容。但是,是的,有时 SQL 只是方便的选择 ^_^