gpt4 book ai didi

c# - 与 ViewModel 共享 EntityFramework 上下文

转载 作者:行者123 更新时间:2023-11-30 20:52:17 25 4
gpt4 key购买 nike

我将 EF 6.1 alpha 与 Caliburn.Micro 2.0 -alpha2 结合使用。

我有一个名为 ProductWorkspaceViewModel 的 ViewModel,其中包含一个 ProductViewModel。这两个 ViewModel 都使用 EF 和各自的上下文,而第一个从 Db 读取所有产品并将它们显示在列表中,然后对所选项目执行 CRUD 操作。

现在,当我从 ProductViewModel 中删除、添加或更新 Product 时,它应该在 ProductWorkSpaceViewModel 中得到更新。我使用 EventAggregator 更新工作区并使用 LoadAll() 或将更新的 ProductEntity 发送到 WorkSpaceViewModel。但是当我从 Workspace 选择相同的更新产品时,惰性的相关属性不会在 ProductViewModel 中更新,因为它们都有不同的上下文实例。

我正在考虑为这两个 ViewModel 使用共享上下文,但已经阅读了其他问题,例如不应共享上下文,并且应该在操作完成后立即处理,如删除。

我怎样才能最好地解决上述问题。许多数据模板也使用工作区上下文。

我应该使用共享上下文还是更新 ViewModel 并加载所有惰性属性。但这会增加更多代码并且很复杂。

寻找最佳实践。

更新:我刚刚提到 DbContext 作为引用,我使用 DAL,它有一个继承自 DbContext 的类。

我还想更新一下,我的主项目既不使用 EF 也不使用任何 DAL。它充当我作为子项目创建的所有模块的宿主。例如,ProductViewModel 是库存模块的一部分,我使用 IoC (MEF) 将其加载到 Main.exe 中

最佳答案

最好的做法是让您的 ViewModel 不使用 Entity Framework 或直接使用 DataContext,而是拥有一个负责所有数据库的数据访问层而不是操作,您的 VM 应该使用服务提供商与您的 DAL 通信。

事实上,您甚至不应该在您的主项目中引用 Entity Framework ,而应该只在您的 DAL 类库中引用

在您的 VM 中,您应该使用 Product 类的 ObservableCollection,并且您的两个 VM 都应该在父子中使用相同的 ObservableCollection在这种情况下,您对 ProductViewModel 中的 Product 所做的任何更改都会立即影响您的 ProductWorkspaceViewModel

关于c# - 与 ViewModel 共享 EntityFramework 上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21055914/

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