【发布时间】:2013-05-08 23:27:07
【问题描述】:
在 ASP.NET Web API 中,它允许您在 url 字符串中编写 ODATA 查询,以指定要从方法返回的数据。然而,我很难理解的部分是 ODATA 用于过滤 C# 对象的 IQueryable 集合,而不是数据库表本身。
这是不切实际的,因为您确实希望在数据库级别进行过滤,因为从数据库返回所有对象,将它们加载到 C# IQueryable 列表中,然后让 ODATA 过滤该列表是很糟糕的。
下面是代码,它使用 NHibernate 和 Castle Active Record 进行数据访问:
public IQueryable<Message> GetAll()
{
return from m in MessageData.FindAllQueryable()
select ConvertToView(m);
}
public static IQueryable<Message> FindAllQueryable()
{
var criteria = DetachedCriteria.For<Message>()
.CreateAlias("MessageRecipients", "mr")
.AddOrder(new Order("Id", false));
return ActiveRecordMediator<Message>.FindAll(criteria).AsQueryable();
}
这段代码的最终结果将是它从数据库中返回所有消息。如何允许 ODATA 对数据库本身执行过滤器?否则 ODATA 的整个概念对于现实世界的情况是完全不切实际的。
【问题讨论】:
-
也许这是一个选项:github.com/pvginkel/NHibernate.OData
-
@Andreas - 感谢您的建议,但我不知道如何将 NHibernate.OData 集成到 Castle ActiveRecord 中。 :(
标签: nhibernate castle-activerecord asp.net-mvc-4 asp.net-web-api