gpt4 book ai didi

vb.net - Entity Framework 和存储库模式

转载 作者:行者123 更新时间:2023-12-01 04:12:50 25 4
gpt4 key购买 nike

我正在尝试将 Repository 模式与 EF4 一起使用,但我不确定如何使用它进行延迟加载。如果我返回一个对象,比如一个客户,我希望能够得到它的订单,也许,不确定,我应该怎么做?

我应该让 Context 存活多久?我应该回去拿订单集吗?

任何例子将不胜感激!

谢谢!

编辑

因此,如果我有一个像这样的存储库(假设我有 Category 和 SubCategory 的 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

如果我尝试在 View 中说:
Category.SubCategories.Count

它吹嘘说 ObjectContext 已被处理。

最佳答案

如果您遵循存储库每个聚合存在一次的概念,那么您(可能)将在存储库中以您知道将使用它的方式加载树。因此,对于您的示例,您可以调用 db.Categories.Include("SubCategories") 来预先加载它们。您可能还有不同的方法,例如“GetCategoriesDeep()”和“GetCategoriesShallow()”来区分您是否有不同的场景。

为了回答您更深层次的问题,上下文应该持续单个事务(无论您在应用程序中定义它)。在您的情况下,就像我上面所说的,似乎正确的边界是存储库的方法调用。 Controller 应该决定用户是请求一个带子类别的集合还是不带子类别的集合,然后在 repo 上调用正确的方法来回答这个问题。 View 不必访问数据上下文(甚至通过延迟加载间接访问)。

关于vb.net - Entity Framework 和存储库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5096640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com