【发布时间】:2012-12-04 04:55:37
【问题描述】:
我在 MVC 4 应用程序中使用 NHibernate/Fluent NHibernate 最新版本。我通过 Nuget 安装了Fluent NHibernate,它的版本是1.3.0.733。 NHibernate 的版本类似于3.3.x
PM> 安装包 FluentNHibernate
请注意,我安装Fluent NHibernate 1.2.0.712 版本时不会出现此问题。
PM> 安装包 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。在数据库中,我有 15 条记录为 Post。当我将 pageNo 作为 0 和 pageSize 作为 10 传递时,我从上述查询中只得到 7 条记录。为什么?
这里是类及其对应的映射类。
发帖
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; }
}
类别
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; }
}
标签
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; }
}
邮政地图
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");
}
}
类别图
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");
}
}
标签地图
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");
}
}
【问题讨论】:
-
仔细检查一下:它们肯定都是“已发布”?
-
您使用的是哪个版本的 NH?
-
作为旁注,最好将 API 设计为采用 (firstresult, maxresults) 而不是 (pageno, pagesize),因为前者更灵活。
-
@hazzik 我更新了问题
-
@Simon 是的,所有帖子都已发布
标签: c# nhibernate fluent-nhibernate