我正在使用SubSonic 3,并且正在使用ActiveRecord方法。我的控制器中有一个简单的查询:
var posts = from p in Post.GetPaged(page ?? 0, 20)
orderby p.Published descending
select p;
“page”变量定义为可为空的int(int?)。
这是问题,当我运行以下测试时,它运行正常并通过:
[Test]
public void IndexWithNullPageShouldLoadFirstPageOfRecentPosts()
{
//act
var testPosts = new List<Post>()
{
new Post() {PostID = 1, BlogID = 1, Published = null, Body = "1"},
new Post() {PostID = 2, BlogID = 1, Published = DateTime.Now, Body = "2"},
new Post() {PostID = 3, BlogID = 1, Published = DateTime.Now.AddDays(1), Body = "3"}
};
Post.Setup(testPosts);
//act
var result = controller.Index(null) as ViewResult;
//assert
Assert.IsNotNull(result);
var home = result.ViewData.Model as HomeViewModel;
Assert.IsInstanceOf(typeof(HomeViewModel), home, "Wrong ViewModel");
Assert.AreEqual(3, home.Posts.Count());
//make sure the sort worked correctly
Assert.AreEqual(3, home.Posts.ElementAt(0).PostID);
Assert.AreEqual(2, home.Posts.ElementAt(1).PostID);
Assert.AreEqual(1, home.Posts.ElementAt(2).PostID);
}
但是,当我启动网站时,它不会返回任何记录(是的,实时数据库中有记录)。两种方式都将“page”变量设置为null。我发现如果我将“GetPaged”方法中的索引更改为1而不是0 - 那么会在网站上返回记录...但是,只要我这样做 - 我的测试就不再通过了。我见过的所有文档都显示GetPaged索引是从零开始的...所以我在这里有点困惑。
有什么想法吗?
谢谢, 乍得
答案 0 :(得分:0)
这似乎是GetPaged与ActiveRecord一起使用的方式中的错误/不一致。正如您已经解决的那样,它在ActiveRecord存储库中使用基于1的索引而不是基于0的索引。您可以在github
将此问题记录为问题