vb.net – 实体框架和存储库模式

我试图使用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上调用正确的方法来回答该问题.视图不应该必须访问数据上下文(甚至间接通过延迟加载).

点赞