【问题标题】:WCF+NHibernate+LazyLoadingWCF+NHibernate+延迟加载
【发布时间】:2011-06-08 15:17:39
【问题描述】:

我在使用 WCF 和 NHibernate 通过网络传输延迟加载的数据时遇到问题。我总共有超过 5,000,000 条记录。

应用程序是多层的,使用 MVVM 并作为:WCF (net.tcp Binding) --> 数据访问层 --> 业务层 --> UI。

WCF 或 NHibernate 没有问题。映射是正确的,它在 WCF 结束时很好地延迟加载数据。

问题在于通过网络将其发送到客户端。延迟加载的数据开始扩展到实际,这至少需要 30 分钟。

是否有可能阻止这种扩张?

这是类架构:

class A

{

  //properties

   IList<B> list;

}



class B

{

  //properties

   IList<C> c_list;

   IList<D> d_list;

   IList<E> e_list;

   IList<F> f_list;

   IList<G> g_list;

}



class C

{

  //properties

   IList<D> d_list;

   IList<E> e_list;

   IList<F> f_list;

   IList<G> g_list;

}


class D

{

  //properties

}

class E

{

  //properties

}



class F

{

  //properties

}



class G

{

  //properties

}

【问题讨论】:

    标签: wcf


    【解决方案1】:

    关闭延迟加载或使用 DTO!这就是解决方案。传输 500 万条记录看起来是无稽之谈,如果您的集合是延迟加载的,则初始序列化可能会触发数十万个数据库选择。此外,如果每条记录只有 1B,您将传输 5MB - 我怀疑该记录有 1B,因此我们可以讨论传输数十 MB。

    【讨论】:

    • 感谢您的快速回复。是的,我同意转移 5M 记录是无稽之谈。但是,这是要求。你有任何关于 DTO 使用的例子吗?我对 WCF 比较陌生。问候
    【解决方案2】:

    推荐的方法是不要通过 WCF 公开您的域模型。您应该通过网络发送 DTO。在这种情况下,您将能够控制服务器端的延迟加载并正确设计它。我也推荐使用NHibernate Profiler。 500万条记录是海量数据——考虑在服务器端实现分页

    【讨论】:

    • 感谢您的快速回复。是的,我同意转移 5M 记录是无稽之谈。但是,这是要求。你有任何关于 DTO 使用的例子吗?我对 WCF 比较陌生。问候
    猜你喜欢
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2010-11-04
    • 2013-12-10
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多