0

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は実装クラスをすべて単独で解決するという結論に至ります。

誰かが私にこれに関するドキュメントへのリンクを送ってもらえますか?この機能の名前も技術的背景もわかりません...

前もって感謝します!

4

1 に答える 1

0

実際、これはNHibernateが継承マッピングを行う方法です。

説明した使用法に加えて、基本タイプを使用してオブジェクトに子コレクションを定義し、継承されたタイプのオブジェクトをコレクションに配置することもできます。たとえば、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 に答える