我有4个类Person(有一个类型Animal的引用(将包含一个继承Animal的类))Animal(抽象基础)Dog(继承Animal)Cat(继承Animal)
为了清楚我正在使用Table-per-class映射,所以我有一个Animal,Dog和Cat数据库表 .
我想要做的是选择每个有狗的人,如果可能的话,能够过滤狗类中的字段 . 如果可能的话,我宁愿通过类型安全代码完成所有这些操作,而不是直接使用SQL或字符串来阻止代码中断 .
(流利的1.2)nhibernate(3.1)是否可以实现?有人可以开始指点我正确的方向吗?我的查询比解释的要复杂一些,但这是它的核心 .
还有一点偏离主题,但有没有任何地方有mapSession.QueryOver()下的所有方法的描述?那里有很多东西,有些是显而易见的,但像Fetch等其他人并不清楚他们都做了什么,可能就是为什么我这么难找到 .
---编辑类供参考---
public class Person
{
Animal pet;
public string Name;
}
public abstract class Animal
{
public int ID;
public string Name;
}
public class Dog : Animal
{
public string Color;
}
public class Cat : Animal
{
public string someOtherVal;
}
只使用一个会话对象,我希望得到所有不同的人名字,他们有一个类型狗和狗是棕色的宠物 .
这是我想要最终得到的最终查询,但我试着开始只是让那些有狗的人,因为我觉得这很容易,但似乎事实并非如此 .
我试过的原始Querys是
Dog dog = null;
var test2 = session.QueryOver<Person>()
.Inner.JoinAlias(x=>x.Pet, ()=> dog)
.Where(()=>dog != null)
.List();
我也有预测,以减少它的明显名称,但我仍然无法限制只有狗的人 .
1 回答
以下是如何完成此操作的示例:
http://jameskovacs.com/2011/02/16/getload-polymorphism-in-nhibernate-3/
你也可以试试这样的东西,我不是百分百肯定它会起作用,但是你可以尝试一下:
这有帮助吗?