我在MVC 4应用程序中使用 NHibernate/Fluent NHibernate 最新版本 . 我通过Nuget安装了 Fluent NHibernate
,它的版本是 1.3.0.733
. NHibernate的版本就像 3.3.x
PM> Install-Package FluentNHibernate
请注意,安装 Fluent NHibernate
版本1.2.0.712时不会出现此问题 .
PM> Install-Package FluentNHibernate -Version 1.2.0.712
我有这样的查询,
public IList<Post> Posts(int pageNo, int pageSize)
{
return _session.Query<Post>()
.Where(p => p.Published)
.OrderByDescending(p => p.PostedOn)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category)
.FetchMany(p => p.Tags)
.ToList();
}
那里有三个类: Post
, Category
和 Tag
. 在数据库中我有_1525821_的15条记录 . 当我将 pageNo
传递为0和 pageSize
为10时,我从上面的查询中只获得了7条记录 . 为什么?
以下是类及其对应的映射类 .
Post
public class Post
{
public virtual int Id
{ get; set; }
public virtual bool Published
{ get; set; }
public virtual DateTime PostedOn
{ get; set; }
public virtual Category Category
{ get; set; }
public virtual IList<Tag> Tags
{ get; set; }
}
Category
public class Category
{
public virtual int Id
{ get; set; }
public virtual string Name
{ get; set; }
public virtual string Description
{ get; set; }
public virtual IList<Post> Posts
{ get; set; }
}
Tag
public class Tag
{
public virtual int Id
{ get; set; }
public virtual string Name
{ get; set; }
public virtual string Description
{ get; set; }
public virtual IList<Post> Posts
{ get; set; }
}
PostMap
public class PostMap: ClassMap<Post>
{
public PostMap()
{
Id(x => x.Id);
Map(x => x.Published).Not.Nullable();
Map(x => x.PostedOn).Not.Nullable();
References(x => x.Category).Column("Category").Not.Nullable();
HasManyToMany(x => x.Tags).Cascade.All().Table("PostTagMap");
}
}
CategoryMap
public class CategoryMap : ClassMap<Category>
{
public CategoryMap()
{
Id(x => x.Id);
Map(x => x.Name).Length(50).Not.Nullable();
Map(x => x.Description).Length(200);
HasMany(x => x.Posts).Inverse().Cascade.All().KeyColumn("Category");
}
}
TagMap
public class TagMap: ClassMap<Tag>
{
public TagMap()
{
Id(x => x.Id);
Map(x => x.Name).Length(50).Not.Nullable();
Map(x => x.Description).Length(200);
HasManyToMany(x => x.Posts).Cascade.All().Inverse().Table("PostTagMap");
}
}
1 回答
请尝试检查这个答案:https://stackoverflow.com/a/13894326/1679310
该问题很可能隐藏在
Tag
集合的内联Fetch中 . 它将导致SELECT子句返回更多行,然后Post
计数 .Take()
和Skip()
应用于此结果集...因此只返回前7个帖子,因为其中一些有更多标签: