我正在尝试使用EF4的Repository模式,我只是不确定如何使用它来进行Lazy Loading。如果我退回一个物品,说一个顾客,我希望能够得到它的订单,也许,不确定,我该怎么办呢?
我应该让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被处理掉了。
答案 0 :(得分:2)
如果您遵循每个聚合存储库存储一次的概念,那么您(可能)将以您知道将在存储库中使用它的方式加载树。因此,对于您的示例,您将调用db.Categories.Include(“SubCategories”)来急切加载它们。您可能还有不同的方法,如“GetCategoriesDeep()”和“GetCategoriesShallow()”,以区分您是否有不同的方案。
要回答您的更深层次的问题,上下文应该持续一次交易(不过您在应用中定义了这种情况)。在你的情况下,就像我上面说的那样,它的正确边界似乎是存储库的方法调用。控制器应决定用户是否正在请求具有w / o子类别的集合,然后在repo上调用正确的方法来回答该问题。视图不应该访问数据上下文(甚至间接通过延迟加载)。