Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
NHibernate标准获取模式_Nhibernate_Criteria - Fatal编程技术网

NHibernate标准获取模式

NHibernate标准获取模式,nhibernate,criteria,Nhibernate,Criteria,我有一个类型Type1,其属性Type2s由一个列表组成。我已为属性配置了NHibernate映射,如下所示: [Map(0, Table = "Type2s", Schema = "MySchema", Cascade = CascadeStyle.All, Lazy = true, Inverse = true)] [Key(1, Column = "Type1Id")] [OneToMany(2, Class = "Type2, MyNamespace")] 检索Type1实例的这两个标

我有一个类型Type1,其属性Type2s由一个
列表组成。我已为属性配置了NHibernate映射,如下所示:

[Map(0, Table = "Type2s", Schema = "MySchema", Cascade = CascadeStyle.All, Lazy = true, Inverse = true)]
[Key(1, Column = "Type1Id")]
[OneToMany(2, Class = "Type2, MyNamespace")]
检索Type1实例的这两个标准在行为上有什么区别:

var criteria1 = DetachedCriteria.For<MyType1>();

var criteria2 = DetachedCriteria.For<MyType1>().SetFetchMode("Type2s", FetchMode.Join);
var criteria1=DetachedCriteria.For();
var criteria2=DetachedCriteria.For().SetFetchMode(“Type2s”,FetchMode.Join);
当我从这些条件中调用可执行条件上的.List时,可能检索与每个Type1实例关联的Type2s的SQL不会运行,直到我实际尝试访问该属性,因为该属性被标记为惰性。这是正确的假设吗


如果我想强制评估Lazy属性,如何才能最好地实现这一点?

我不太熟悉属性绑定与hbm/fluent的对比,但我相信您已经解决了自己的问题

您认为Type2s的数据在收到请求之前不会加载是正确的,因为行李是惰性的。第二个条件的fetchmode强制同时对这些对象进行水合处理,即在一次数据库往返中

顺便说一句,FetchMode.Join相当于FetchMode.Eager(在我看来,这是一个关于懒惰的更好名称)

文章对此进行了更深入的解释:

描述
FetchMode.Join
FetchMode.Eager

我不太熟悉属性绑定与hbm/fluent的对比,但我相信您已经解决了自己的问题

您认为Type2s的数据在收到请求之前不会加载是正确的,因为行李是惰性的。第二个条件的fetchmode强制同时对这些对象进行水合处理,即在一次数据库往返中

顺便说一句,FetchMode.Join相当于FetchMode.Eager(在我看来,这是一个关于懒惰的更好名称)

文章对此进行了更深入的解释:

描述
FetchMode.Join
FetchMode.Eager