【发布时间】:2012-03-07 14:55:38
【问题描述】:
我有 4 节课 Person(引用了 Animal 类型(将包含一个继承 Animal 的类)) 动物(抽象基础) 狗(继承动物) 猫(继承动物)
为了清楚,我正在使用每类表映射,所以我有一个 Animal、Dog 和 Cat DB 表。
我想要做的是选择每个拥有 Dog 的人,如果可能的话,能够过滤 dog 类中的字段。如果可能的话,我宁愿通过类型安全的代码来完成所有这些工作,而不是直接使用 SQL 或字符串(如果可能的话)以阻止代码随着时间的推移而中断。
(流利的 1.2)nhibernate(3.1)可以做到这一点吗?有人可以开始为我指明正确的方向吗?我的查询比解释的要复杂一些,但这是它的核心。
也有点离题,但是有没有任何地方描述了 mappingSession.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;
}
只使用一个会话对象,我想获得所有不同的人的名字,他们有一只狗类型的宠物,而狗是棕色的。
这是我想要结束的最后一个查询,但我试图从让有狗的人开始,因为我认为这很容易,但似乎事实并非如此。
我尝试过的原始查询是
Dog dog = null;
var test2 = session.QueryOver<Person>()
.Inner.JoinAlias(x=>x.Pet, ()=> dog)
.Where(()=>dog != null)
.List();
我也有计划减少它的独特名称,但我仍然无法将其限制为仅限于有狗的人。
【问题讨论】:
标签: nhibernate reference fluent-nhibernate subclass fluent