NHibernate标准获取模式
我有一个类型Type1,其属性Type2s由一个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实例的这两个标
列表组成。我已为属性配置了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
: