Nhibernate QueryOver<;界面>;获取所有实现
Nhibernate有一个很好的特性,我巧合地发现: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
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
ansImpl2
对象(以防映射这些类)。它们不需要映射为子类映射
,这使我得出结论,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);