Nhibernate 在几乎相同的查询中获得多个结果

Nhibernate 在几乎相同的查询中获得多个结果,nhibernate,fluent-nhibernate,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Fluent Nhibernate Mapping,在FNH中,我有两个非常相似的查询,作用于类似的类,Project和Foo。 Foo只是从Project派生的一个新的本地类。它的类映射也是从项目的类映射派生的 public class Foo:pcm.Domain.Project { } public class FooMap : pcm.Mappings.ProjectMapBase<Foo> { } 使用Take(10)功能时 基础的全选查询将根据您的RDBMS功能运行 然后将返回前10个结果(分页) 由于不

在FNH中,我有两个非常相似的查询,作用于类似的类,Project和Foo。 Foo只是从Project派生的一个新的本地类。它的类映射也是从项目的类映射派生的

    public class Foo:pcm.Domain.Project { }
    public class FooMap : pcm.Mappings.ProjectMapBase<Foo> { }
使用
Take(10)
功能时 基础的全选查询将根据您的RDBMS功能运行
然后将返回前10个结果(分页

由于不使用ORDER BY表达式,由于分页和RDBMS功能,相同的查询将导致不同的多次执行

希望有用。

当您使用
Take(10)
功能时 基础的全选查询将根据您的RDBMS功能运行
然后将返回前10个结果(分页

由于不使用ORDER BY表达式,由于分页和RDBMS功能,相同的查询将导致不同的多次执行


希望有用。

可能与此相关:

(10) 多态性(可选,默认为隐式):确定使用隐式还是显式查询多态性

隐式多态性意味着类的实例将 由命名任何超类或实现接口的查询返回 或者该类以及该类的任何子类的实例将 由命名类本身的查询返回。显式多态性 意味着类实例将仅返回 显式命名该类,并将 仅返回映射在此内部的子类的实例 作为或的声明。在大多数情况下 默认的多态性=“隐式”是合适的。明确的 当两个不同的类映射到 相同的表(这允许一个包含子集的“轻量级”类 表列的名称)

因此,您可以使用:
polymorphics.Explicit()修复映射

公共类FooMap:pcm.Mappings.ProjectBaseMapTemplate
{
公共地图()
{
多态性。显式();
Map(x=>x.ProjectState).Column(“project_state”);
}
}

可能与此有关:

(10) 多态性(可选,默认为隐式):确定使用隐式还是显式查询多态性

隐式多态性意味着类的实例将 由命名任何超类或实现接口的查询返回 或者该类以及该类的任何子类的实例将 由命名类本身的查询返回。显式多态性 意味着类实例将仅返回 显式命名该类,并将 仅返回映射在此内部的子类的实例 作为或的声明。在大多数情况下 默认的多态性=“隐式”是合适的。明确的 当两个不同的类映射到 相同的表(这允许一个包含子集的“轻量级”类 表列的名称)

因此,您可以使用:
polymorphics.Explicit()修复映射

公共类FooMap:pcm.Mappings.ProjectBaseMapTemplate
{
公共地图()
{
多态性。显式();
Map(x=>x.ProjectState).Column(“project_state”);
}
}

您可以发布您的映射吗?我会说这是因为派生类具有fetch=“join”一对多关系。并将fetch=“join”替换为fetch=“select”。但是,由于是基类产生了更多的元素,我感到困惑:-)没问题,我用更多的信息更新了帖子。我没有看到项目类(基本类?)它不应该是public FooMap():base(){……}好的,我现在也添加了它。CompanyList映射了吗?延迟加载还是加入加载?我猜(项目->公司)关系的数量+没有公司的项目的数量等于30。你能发布你的映射吗?我会说这是因为派生类具有fetch=“join”一对多关系。并将fetch=“join”替换为fetch=“select”。但是,由于是基类产生了更多的元素,我感到困惑:-)没问题,我用更多的信息更新了帖子。我没有看到项目类(基本类?)它不应该是public FooMap():base(){……}好的,我现在也添加了它。CompanyList映射了吗?延迟加载还是加入加载?我猜(项目->公司)关系的数量+没有公司的项目数量等于30
        var list = session.Query<Project>()
            .Take(10)
            .ToList();

        var list2 = session.Query<foo>()
            .Take(10)
            .ToList();

        Assert.Equal(list.Count(),list2.Count());
public class ProjectBaseMapTemplate<T> : ClassMap<T> where T: ProjectBase
{
    public ProjectBaseMapTemplate()
    {
        Table("proj");
        Id(x => x.MasterKey, "master_key");
        Map(x => x.ProjectName).Column("project_name");
        Map(x => x.ProjectTitle, "project_title");
    }
}
public class ProjectBaseMap : ProjectBaseMapTemplate<ProjectBase> { }
    public class Foo:pcm.Domain.ProjectBase 
    {
            public virtual int ProjectState{ get; set; }
    }
    public class FooMap : pcm.Mappings.ProjectBaseMapTemplate<Foo> 
    {
        public FooMap()
        {
            Map(x=> x.ProjectState).Column("project_state");
        }
    }
public class ProjectBase
{
    public virtual string MasterKey { get; set; }
    public virtual string ProjectName { get; set; }
    public virtual string ProjectTitle { get; set; }
}
public class FooMap : pcm.Mappings.ProjectBaseMapTemplate<Foo> 
{
    public FooMap()
    {
        Polymorphism.Explicit();
        Map(x=> x.ProjectState).Column("project_state");
    }
}