C# 查询多个表的通用查询

C# 查询多个表的通用查询,c#,.net,nhibernate,queryover,C#,.net,Nhibernate,Queryover,我有一个Nhibernate模型,它继承了基础模型的属性,但使用了不同的表(视图): 子对象的映射如下所示: public class ChildClassMap : ClassMap<ChildModel> { public ChildClassMap() { Table(ParentViewEnhanced); //MapAllThePropertiesFromBaseviaStaticHelper Map(x =>

我有一个Nhibernate模型,它继承了基础模型的属性,但使用了不同的表(视图):

子对象的映射如下所示:

public class ChildClassMap : ClassMap<ChildModel>
{
    public ChildClassMap()
    {
       Table(ParentViewEnhanced);
       //MapAllThePropertiesFromBaseviaStaticHelper
       Map(x => x.ChildProperty1).Column("Property1");
    }
}
create view ParentViewEnhanced
AS select p.*,
s.xyz,
....
FROM Parent LEFT JOIN subtable s ON (...)
有了这个,我想创建一个通用查询器,它应该根据某个值查询上述模型之一,因此我有:

T m_Alias = null; //T is generic parameter of ParentModel
IQueryOver<T, T> query = mySession.QueryOver(() => m_Alias);
只有在查询父表(parent)时才会发生这种情况。当T设置为类型ChildModel时,只执行负责ParentViewEnhanced的查询(如预期)

e、 g.我试着跑:

query.Select(Projections.ProjectionList().Add(Projections.CountDistinct<T>(x => x.Id)))
                                                    .UnderlyingCriteria.UniqueResult<int>()
因为正如我所说,当我期望它只在父/子表中搜索时,它同时查询父表和子表(视图)


请注意,在子视图中有一个左连接,模型使用复合键(通过在queryover…)中设置一些属性来限制连接)。除此之外,我不知道如何解决这个问题,也不知道它来自哪里。当我在任何一个模型上使用Session.Get(..)而不是QueryOver时,只访问一个表/视图。

好的,所以经过一点实验,我发现问题是由NHibernate的默认多态行为引起的

添加:

Polymorphism.Explicit();
在基类(ParentModel)的映射中修复了这个问题

query.Select(Projections.ProjectionList().Add(Projections.CountDistinct<T>(x => x.Id)))
                                                    .UnderlyingCriteria.UniqueResult<int>()
query did not return a unique result: 2 
Polymorphism.Explicit();