繁体   English   中英

懒加载NHibernate的集合到ViewModels?

[英]lazy loaded NHibernate collections into ViewModels?

我将NHibernate映射设置为延迟加载= true。 在我的CustomersViewModel中,我有类似以下内容:

        foreach (Customer c in _customerRepository)
        {
            this.Customers.Add(new SingleCustomerViewModel(c));
        }

显然,这消除了所有的延迟加载,因为客户是一个接一个地传递的。

如何将模型对象的集合(包括子集合和子子集合asf)放入ViewModels的相应ObservableCollections中以绑定到UI?

这似乎是一个普遍的问题,但是我在这里和谷歌上都找不到答案。

我不确定我是否完全理解这个问题。 但是我在想为什么不将您的getCustomers方法更改为

 IEnumerable<SingleCustomerViewModel> getCustomers(){
     return  from c in _customerRepository select SingleCustomerViewModel(c);
  }

由于LINQ表达式是惰性计算的,因此nhibernate集合直到它实际绑定到UI之前都不会初始化。

这是一个经典的“ SELECT N + 1”问题:用于NHibernate的任何查询层都为您提供了一种在初始查询中急切加载子集合的方法,从而避免了这种逐行查询模式。

例如,使用LINQ提供程序:

session.Query<Customer> ()
        .FetchMany (c => c.Widgets) // eagerly load child collections
        .ThenFetchMany (w => w.Frobbers); // now get grandchild collection

如果您使用的是HQL,只需将fetch关键字添加到联接中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM