Nhibernate有一个很好的功能,我巧合地发现了这个功能:
public interface IInterface {}
public class Impl1 : IInterface {}
public class Impl2 : IInterface {}
ISession session = sf.OpenSession();
session.QueryOver<IInterface>().List();
这将获取所有Impl1
ans Impl2
个对象(如果这些类被映射)。它们不需要映射为SubClassMaps
,这使我得出NHibernate自己解析实现类的结论。
任何人都可以向我发送有关此文档的链接吗?我不知道这个功能的名称和技术背景......
提前致谢!
答案 0 :(得分:0)
实际上,这只是NHibernate inheritance mapping的方式。
除了您描述的用法之外,您还可以使用基类型在对象上定义子集合,并将任何继承类型的对象放入集合中。例如,您可以拥有另一个包含IInterface
个对象集合的实体:
public class MyEntity
{
public IList<IInterface> MyCollection { get; set; }
}
现在你可以把任何实现IInterface
的对象放到MyCollection
中,NHibernate会持久化它们(如果映射是正确的):
Impl1 i1 = new Impl1();
Impl2 i2 = new Impl2();
MyEntity entity = new MyEntity();
entity.MyCollection.Add(i1);
entity.MyCollection.Add(i2);
session.Save(entity);
但是,实际的数据库使用情况(生成的SQL)取决于您定义的继承映射策略,因此请先熟悉它们。您可以在official documentation中阅读更多内容。