2010-05-04 35 views
2

我最近开始使用自定义的ViewModels(例如,CustomerViewModel)保持LINQ的使用的ViewModels(ASP.NET MVC)时,SQL活着

public class CustomerViewModel 
{ 
    public IList<Customer> Customers{ get; set; } 

    public int ProductId{ get; set; } 

    public CustomerViewModel(IList<Customer> customers, int productId) 
    { 
     this.Customers= customers; 
     this.ProductId= productId; 
    } 

    public CustomerViewModel() 
    { 
    } 
} 

...,我现在将它们传递给我的看法,而不是这些集合本身(例如,var Custs = repository.getAllCusts(id)),因为它似乎是很好的做法。

我遇到的问题是,当使用ViewModels;当它达到这个观点时,我已经失去了对客户进行懒惰加载的能力。在使用它们之前我不相信这是事实。

在仍使用ViewModels的情况下是否可以保留延迟加载的能力? 或者我必须急于使用这种方法加载?

感谢, 钢钣。

回答

2

我想,什么是从懒加载停止你的L2S客户它的属性是您的DataContext是由您的存储库配置。

一种解决方案是不处置您DataContexts until the request has been dealt with - 有相当多的模式在互联网上处理这个。

另一种选择是不使用延迟加载。既然你有一批顾客,我想说这对eagerly load来说是一个非常好的主意,不管你需要什么,否则你将会碰到数据库一次每位顾客

1

从技术上讲,是的,它可能通过IEnumerable<>财产暴露在视图模型的延迟加载的集合。只需公开getter并让getter执行Linq-to-sql查询。

我已经没有用它很成功我自己,但是,因为我更喜欢通过以暴露的ViewModels的集合。直接使用该集合必须急切地加载数据。我可以想象创建一个像这样的集合,该集合作弊并且只在用户调用需要的东西(例如索引到集合中)时才执行负载加载,但我从未关心过实际实现这样的事情。