首页 文章

分散问题与流利的nhibernate

提问于
浏览
3

我在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();
}

那里有三个类: PostCategoryTag . 在数据库中我有_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 回答

  • 4

    请尝试检查这个答案:https://stackoverflow.com/a/13894326/1679310

    该问题很可能隐藏在 Tag 集合的内联Fetch中 . 它将导致SELECT子句返回更多行,然后 Post 计数 . Take()Skip() 应用于此结果集...因此只返回前7个帖子,因为其中一些有更多标签:

    Post1 | TagA Post2 | TagA Post2 | TagB ..

相关问题