Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 持久性框架中的引用标识_.net_Nhibernate_Persistence_Entity - Fatal编程技术网

.net 持久性框架中的引用标识

.net 持久性框架中的引用标识,.net,nhibernate,persistence,entity,.net,Nhibernate,Persistence,Entity,对于指向其父实体的子实体,我们当前的持久性框架属性始终指向同一实例。例如,给定以下实体类 public class Order { public int OrderId{get;set;} public EntityCollection<LineItem> Items{get;} } public class LineItem { public Order Order{ get;set;} } 现在,这是我的问题的关键,对于我们当前的框架,以下是正确的 o

对于指向其父实体的子实体,我们当前的持久性框架属性始终指向同一实例。例如,给定以下实体类

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

public class LineItem
{
    public Order Order{ get;set;}
}
现在,这是我的问题的关键,对于我们当前的框架,以下是正确的

object.ReferenceEquals( order, order.Items[ 0 ].Order );
也就是说,当通过Items属性访问时,行项目上的Order属性指向内存中Order对象的完全相同的实例


我有点厌倦了维护我们的实体工具,希望切换到NHibernate或其他持久性框架。那么我的问题是,NHibernate的延迟加载功能是以相同的方式工作,还是会为每个行项目加载Order对象的新实例?

NHibernate在单个会话(工作单元)中以这种方式工作。通过使用NHibernate二级缓存,有多种方法可以使它在单个会话之外以这种方式工作。关于这一点,可以在这里找到一个很好的解释

NHibernate在单个会话(工作单元)中以这种方式工作。通过使用NHibernate二级缓存,有多种方法可以使它在单个会话之外以这种方式工作。这里有一个很好的解释

是的。它们引用同一个实例!LINQ到SQL和实体框架也是如此。

是。它们引用同一个实例!LINQ to SQL和实体框架也是如此。

是的,NHibernate使用ISession来管理实体引用。其他Persience框架也这样做(或应该这样做)。

是的,NHibernate使用ISession来管理实体引用。其他persistence框架也这样做(或者应该这样做)

可能并不总是正确的,这取决于您如何在nihibernate映射中设置多对一,如果您将其设置为懒惰(如下所示)


那么reference equals将不会返回true

但是,如果您在前面一行中的同一会话中获得初始顺序,则可能会获得真正的对象而不是代理

可能并不总是正确的,这取决于您如何在nihibernate映射中设置多对一,如果您将其设置为懒惰(如下所示)


那么reference equals将不会返回true

但是,如果您在前面一行中的同一会话中获得初始顺序,则可能会获得真正的对象而不是代理

object.ReferenceEquals( order, order.Items[ 0 ].Order );
object.ReferenceEquals( order,order.Items[ 0 ].Order );
<many-to-one name="order"  lazy="proxy" />