WPF + EF:绑定实体并跟踪来自不同上下文的更改
WPF + EF: binding an entity and track changes from different contexts
我有一个使用 Entity Framework 和两个视图的 WPF 应用程序:
- ProductsListView
- ProductEditView
考虑以下情况:
- 打开ProductListView:实例化DbContext,填充产品列表,关闭DbContext。
- 用户选择一个产品并单击编辑按钮。
- 打开 ProductEditView:实例化 DbContext,通过其 ID 加载产品,填充字段和 DbContext已关闭。
- 用户更改字段并单击保存按钮:DbContext 被实例化,产品通过其 ID 加载,应用更改并且 DbContext 已关闭。
如何通知所选产品在产品列表中的绑定?
在内存上下文中:
- 我只是将产品对象从 ProductListView 传递到 ProductEditView,
- 我将字段绑定到 ProductEditViewModel 属性,
- 单击保存按钮后,我会更新产品参考。
因为是同一个参考,所以我不需要对产品列表做任何事情
待更新。
我不知道如何使用 EF 上下文做同样的事情。
有什么建议吗?
在 EF 上下文中,我建议您在所有 4 个操作中保留 DbContext。这将为您省去很多麻烦。
除非您的产品数据非常大,并且您只检索标题和 ID(比如在初始列表获取中),然后从打开 EditView 时保持相同的 DbContext 打开,直到他们关闭它。如果他们保存,EF 将找到更改。
它通过比较从数据库中检索到的值与当前为实体设置的值来发现变化。通过关闭实体上下文,您将摆脱 OriginalValues
.
我有一个使用 Entity Framework 和两个视图的 WPF 应用程序:
- ProductsListView
- ProductEditView
考虑以下情况:
- 打开ProductListView:实例化DbContext,填充产品列表,关闭DbContext。
- 用户选择一个产品并单击编辑按钮。
- 打开 ProductEditView:实例化 DbContext,通过其 ID 加载产品,填充字段和 DbContext已关闭。
- 用户更改字段并单击保存按钮:DbContext 被实例化,产品通过其 ID 加载,应用更改并且 DbContext 已关闭。
如何通知所选产品在产品列表中的绑定?
在内存上下文中:
- 我只是将产品对象从 ProductListView 传递到 ProductEditView,
- 我将字段绑定到 ProductEditViewModel 属性,
- 单击保存按钮后,我会更新产品参考。
因为是同一个参考,所以我不需要对产品列表做任何事情 待更新。
我不知道如何使用 EF 上下文做同样的事情。
有什么建议吗?
在 EF 上下文中,我建议您在所有 4 个操作中保留 DbContext。这将为您省去很多麻烦。
除非您的产品数据非常大,并且您只检索标题和 ID(比如在初始列表获取中),然后从打开 EditView 时保持相同的 DbContext 打开,直到他们关闭它。如果他们保存,EF 将找到更改。
它通过比较从数据库中检索到的值与当前为实体设置的值来发现变化。通过关闭实体上下文,您将摆脱 OriginalValues
.