如何防止Nhibernate获取派生类?

时间:2012-11-29 10:18:14

标签: nhibernate nhibernate-mapping fetch linq-to-nhibernate class-table-inheritance

我正在使用Nhibernate,并且在获取具有多个派生类的基类时遇到问题(每个类映射不同的表)。当我看到这个请求时,Nhibernate加入了每个派生表,这对表现产生了巨大的影响......

以下是我课程的简化视图:

public class Animal{
    public virtual int ID { get; set;}
    public virtual string Name { get; set;}
}

public class Dog : Animal{
    //others properties
}

public class Cat: Animal{
    //others properties
}

public class Person{
    public virtual int ID { get; set;}
    public virtual IEnumerable<Animal> Animals { get; set;}
}

一个人有动物名单,我只想要他们的名字。这个例子并不完美,而且更复杂(银行业务),但它反映了我的问题。 我知道它可以以不同的方式完成,但它是遗产,所以我没有选择......

提前致谢。

2 个答案:

答案 0 :(得分:1)

IMO NHibernate只会连接包含投影列的表。定义一个查询,但不返回Person,而是将你需要的属性投射到dto / anonymous类

答案 1 :(得分:0)

毕竟,我创建了一个由Dog,Cat等继承的AnimalBase类和一个没有任何子节点的Animal类(都有接口IAnimal)。

在95%的请求中,我只需要Animal,我在像Person这样的其他对象中引用这个类。

不完美,但我找不到更好的东西......

感谢Firo的帮助。