public class EngineInfo
{
public int Id{get;set;}
public int? AircraftId { get; set; }
public string SerialNumber { get; set; }
public int Position { get; set; }
public string RegNumber { get; set; }
}
//这是使用上述模型的代码。我有17,000个这个模型的文件
ravenSession.Store(new AuthorizationUser
{
Id = "Authorization/Users/1",
Name = "user-1",
Permissions =
{
new OperationPermission
{
Allow = true,
Operation = "EngineInfos/View",
Tags = "Company/100"
}
}
});
1. var query = ravenSession.Query<EngineInfo>();
//当我记录query.Count()时,我看到所有文件都计数,即。,17000,这忽略了我在before语句中设置的授权。如果我在上面的语句中添加where子句它是有效的,我可以看到正确的计数。但我希望获得用户有权访问的所有文档。
2. var query = ravenSession.Query<EngineInfo>().ToList();
现在,考虑到授权,我得到正确的计数。但问题是除非我提到Take(x),否则它不会返回所有结果。 我试过
RavenQueryStatistics queryStats;
query.Statistics(out queryStats);
queryStats.TotalResults
我仍然无法获得授权结果。我全力以赴。
你可以帮我找出查询结果的TotalCount而不加载所有记录吗?
我的要求是在可搜索的ExtJS分页网格中显示所有引擎。我需要知道要显示的记录的总数和计算并显示页数(页数是固定的)。
答案 0 :(得分:1)
这是设计使然,请参阅http://ravendb.net/docs/intro/safe-by-default。
session.Query<Post>().Count()
将为您提供服务器上所有帖子的计数,而session.Query<Post>().ToList().Count()
将提供已提取给客户的帖子的计数。
默认情况下,RavenDB将.Take(128)应用于查询,以鼓励您进行分页并默认是安全的。如果你想获得更多,那么你需要指定多少,例如.Take(1024)
,但默认情况下,服务器不会一次返回超过1024个项目。您可以配置服务器以执行此操作,但不建议这样做。你可以更好地使用分页,因为用户无论如何都无法立即处理这些信息。
答案 1 :(得分:0)
你看到的是Raven的QueryStatistics忽略了Authorization包。这has been reported in the Raven Google Group。
据我所知,在撰写本文时,没有一种可靠的方法来获取查询的授权文档总数。在我看来,Authorization包应该包含一些支持。
我会调查并更新这个答案,因为我发现了更多。