我在使用WCF和NHibernate通过线路传输延迟加载数据时遇到问题。我一共有超过5,000,000条记录。
应用程序是多层的,使用MVVM并且用作:WCF(net.tcp绑定) - >数据访问层 - >业务层 - > 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
}
答案 0 :(得分:1)
关闭延迟加载或使用DTO!这是解决方案。传输5M记录看起来像废话,如果您的集合是延迟加载的,则初始序列化可以触发数十万个数据库选择。此外,如果每个记录只有1B,你将转移5MB - 我怀疑该记录有1B所以我们可以谈论转移几十MB。
答案 1 :(得分:0)
推荐的方法不是通过WCF公开您的域模型。你应该通过网络发送DTO。在这种情况下,您将能够控制服务器端的延迟加载并正确设计它。我还建议使用NHibernate Profiler。 5百万条记录是大量数据 - 考虑在服务器端实现分页