获取对象时每个子类的nhibernate表策略问题

获取对象时每个子类的nhibernate表策略问题,nhibernate,Nhibernate,我正在开发一个使用NHibernate的ASP.NET Web应用程序,我注意到了一些有趣的事情。 因此,我有一个对象文档,我将它制作成一个抽象类和两个具体的实现Document1和Document2。 我尝试使用文档()中描述的每个子类的表策略为它们编写映射: ... ... ... 下面是我从应用程序会话中获取对象的方法: public TEntity GetById<TEntity>(object id) { return Session.Get<TEntit

我正在开发一个使用NHibernate的ASP.NET Web应用程序,我注意到了一些有趣的事情。
因此,我有一个对象文档,我将它制作成一个抽象类和两个具体的实现Document1和Document2。 我尝试使用文档()中描述的每个子类的表策略为它们编写映射:


...
...
...
下面是我从应用程序会话中获取对象的方法:

public TEntity GetById<TEntity>(object id) {
    return Session.Get<TEntity>(id);
}  
public tenty GetById(对象id){
返回会话.Get(id);
}  
现在我的问题是,当我这样做时:

GetById<Document>(1)
GetById(1)
例如,我没有得到Document对象,而是得到Document1或Document2类型的对象,具体取决于该对象的类型

我尝试使用文档(上面的链接)中提到的带有鉴别器策略的table per subclass,并在抽象对象上设置join=select和lazy=false,以使其返回Document类型的对象,但没有任何效果

代码可以工作,但似乎不正确。我有一个无法使用的左连接。 难道没有一种方法可以直接获取抽象对象吗?或者nhibernate是否实际实例化了它返回的对象,这将使这变得不可能?可能吗


我觉得我得到的信息比我需要的要多。

你永远不会得到抽象类,因为抽象类的关键是你不能实例化一个抽象类。此外,您的代码只会将文档外观返回到代码的其余部分。因此,我不确定问题到底是什么。

检索Document1或Document2的实例时,不可能只填充抽象类中定义的属性。在.NET中,即使类型被声明为接口或抽象类,您也总是在处理具体类的实例。

我知道您不能实例化抽象类,但可以将对象强制转换为抽象类的类型。@Para,这是正确的,但如果您检查对象,它仍然是具体类型。
GetById<Document>(1)