Nhibernate QueryOver<;界面>;获取所有实现

Nhibernate QueryOver<;界面>;获取所有实现,nhibernate,interface,fluent-nhibernate,fluent-nhibernate-mapping,Nhibernate,Interface,Fluent Nhibernate,Fluent Nhibernate Mapping,Nhibernate有一个很好的特性,我巧合地发现: public interface IInterface {} public class Impl1 : IInterface {} public class Impl2 : IInterface {} ISession session = sf.OpenSession(); session.QueryOver<IInterface>().List(); 公共接口接口{} 公共类Impl1:IInterface{} 公共类I

Nhibernate有一个很好的特性,我巧合地发现:

public interface IInterface {}

public class Impl1 : IInterface {}

public class Impl2 : IInterface {}

ISession session = sf.OpenSession();
session.QueryOver<IInterface>().List();
公共接口接口{}
公共类Impl1:IInterface{}
公共类Impl2:IInterface{}
ISession session=sf.OpenSession();
session.QueryOver().List();
这将获取所有
Impl1
ans
Impl2
对象(以防映射这些类)。它们不需要映射为
子类映射
,这使我得出结论,NHibernate可以自行解析实现类

有人能给我发一个关于这个的文档链接吗?我既不知道这个功能的名称也不知道它的技术背景


提前谢谢

事实上,这正是NHibernate的做法

除了您描述的用法之外,您还可以使用基类型在对象上定义子集合,并将任何继承类型的对象放入集合。例如,您可以拥有另一个实体,其中包含
IInterface
对象的集合:

public class MyEntity
{
    public IList<IInterface> MyCollection { get; set; }
}
但是,实际的数据库使用情况(生成的SQL)取决于您定义的继承映射策略,因此请先熟悉它们。您可以在中阅读更多内容

Impl1 i1 = new Impl1();
Impl2 i2 = new Impl2();
MyEntity entity = new MyEntity();
entity.MyCollection.Add(i1);
entity.MyCollection.Add(i2);

session.Save(entity);