0

NHibernate的有一個很好的功能,我卻不約而同地發現:QueryOver <IInterface>獲取所有實現

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

其實,這只是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中閱讀更多內容。