一千萬個為什麽

搜索

持久性框架中的參照標識

使用我們當前的指向它父項的子實體的持久性框架屬性始終指向同一個實例。例如,給定以下實體類

public class Order
{
    public int OrderId{get;set;}
    public EntityCollection Items{get;}
}

public class LineItem
{
    public Order Order{ get;set;}
}

我們可以像這樣從數據庫加載訂單:

var order = Order.FindById( 1000 );

現在,我的問題的關鍵在於我們當前的框架如下

object.ReferenceEquals( order, order.Items[ 0 ].Order );

即,通過Items屬性訪問時,訂單項上的Order屬性指向內存中訂單對象的完全相同的實例。

我有點厭倦了維護實體工具,並希望切換到NHibernate或其他持久性框架。我的問題是,NHibernate的延遲加載功能是否以相同的方式工作,或者是否會為每個行項目加載Order對象的新實例?

最佳答案

NHibernate works this way within a single session (Unit Of Work). There are ways to make it work this way beyond a single session by using the NHibernate second level cache. A great explanation of this can be found here First And Second Level Caching In NHibernate

轉載註明原文: 持久性框架中的參照標識