我试图使用EF4的存储库模式,我只是不知道如何使用它来进行延迟加载.如果我退回一个物品,说一个顾客,我希望能够得到它的订单,也许,不确定,我该怎么办呢?
我应该让Context活多久?我应该回去收集订单吗?
任何例子都将非常感谢!!
谢谢!
编辑
所以,如果我有一个像这样的存储库(假设我有类别和子类别的POCO类):
Public Class CategoryRepository
Implements ICategoryRepository
Public Function GetCategories() As List(Of Category)
Using db As New DBContext <-- Entity Framework Context
return db.Categories.ToList()
End Using
End Function
End Class
然后在Controller中像这样使用它:
Public Function Index() As ActionResult
Dim m As New CategoryViewModel
m.Categories = _Repository.GetCategories()
Return View(m)
End Function
如果我在视图中尝试说:
Category.SubCategories.Count
它爆炸说ObjectContext被处理掉了.
最佳答案 如果您遵循每个聚合存储库存在一次的概念,那么您(可能)将以您知道将在存储库中使用它的方式加载树.因此,对于您的示例,您将调用db.Categories.Include(“SubCategories”)来急切加载它们.您可能还有不同的方法,如“GetCategoriesDeep()”和“GetCategoriesShallow()”,以区分您是否有不同的方案.
要回答您更深层次的问题,上下文应该持续一个事务(但是您在应用中定义了这个事务).在你的情况下,就像我上面说的那样,它的正确边界似乎是存储库的方法调用.控制器应决定用户是否正在请求具有w / o子类别的集合,然后在repo上调用正确的方法来回答该问题.视图不应该必须访问数据上下文(甚至间接通过延迟加载).