0

Nhibernate 有一个很好的特性,我偶然发现了这个特性:

public interface IInterface {}

public class Impl1 : IInterface {}

public class Impl2 : IInterface {}

ISession session = sf.OpenSession();
session.QueryOver<IInterface>().List();

这将获取我所有的Impl1ansImpl2对象(以防这些类被映射)。它们不需要映射为SubClassMaps,这使我得出结论 NHibernate 自己解决了实现类。

任何人都可以把这个文档的链接发给我吗?我不知道这个功能的名称和技术背景......

提前致谢!

4

1 回答 1

0

实际上,这只是 NH​​ibernate 进行继承映射的方式。

除了您描述的用法之外,您还可以使用基本类型在对象上定义子集合,并将任何继承类型的对象放入集合中。例如,您可以拥有另一个包含您的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)取决于您定义的继承映射策略,因此请先熟悉它们。您可以在官方文档中阅读更多内容。

于 2012-07-13T14:37:43.967 回答