Nhibernate 在几乎相同的查询中获得多个结果
在FNH中,我有两个非常相似的查询,作用于类似的类,Project和Foo。 Foo只是从Project派生的一个新的本地类。它的类映射也是从项目的类映射派生的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个结果(分页) 由于不
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");
}
}