使用来自两个上下文实例的一个实体 entity framework
Use one entity from two context instance entity framework
我为每个表单创建上下文实例,并且多个表单可以使用相同的实体
保存时如何处理?
DbContext 是您的“视图状态”的一部分,旨在让您能够访问数据库,保存用户正在 Change Tracker 中处理的数据的副本,并将更改刷新回数据库。
在智能客户端应用程序中,DbContext 的自然作用域和生命周期要么是全局的,要么是作用于代表任务或用例的 UI 元素。但在任何一种情况下,您都必须防止 DbContext 的更改跟踪器变得太大或保留数据副本的时间过长,因为即使是单个表单也可能整天保持打开状态。这些应用程序的一个可能的经验法则是在每次成功的 SaveChanges() 之后清除更改跟踪器。除此之外,您当然必须避免长运行 事务,这样 DbContext 就不会长时间保持 DbConnection 打开状态,但无论如何您都必须这样做。关键是具有空更改跟踪器的 DbContext 可以长期存在。
使用短期 DbContext 是可能的,但您失去了 Change Tracker 和 .Local ObservableCollection 的服务,这使得数据绑定非常容易。所以这不是灵丹妙药。
那么关于手头的问题,如果您有 DbContext-per-form,并且您有实体的表单到表单通信,最终由不同的 DbContext 保存,您真的别无选择,在发送之前断开实体与其主 DbContext 的连接。
或者这可能表明这两个表单确实应该共享一个视图状态,并且您应该创建一个包含 DbContext 和实体的显式视图状态对象,并且在表单之间共享它们。
看看智能客户端的Model-View-ViewModel (MVVM) pattern which introduces a distinction between the View (form) and the ViewModel, the data that models the use case user's interaction with the app. It's a useful pattern and is very widely used in XAML-based smart clients. Also XAML is (still) the future,对学习很有帮助。
我为每个表单创建上下文实例,并且多个表单可以使用相同的实体 保存时如何处理?
DbContext 是您的“视图状态”的一部分,旨在让您能够访问数据库,保存用户正在 Change Tracker 中处理的数据的副本,并将更改刷新回数据库。
在智能客户端应用程序中,DbContext 的自然作用域和生命周期要么是全局的,要么是作用于代表任务或用例的 UI 元素。但在任何一种情况下,您都必须防止 DbContext 的更改跟踪器变得太大或保留数据副本的时间过长,因为即使是单个表单也可能整天保持打开状态。这些应用程序的一个可能的经验法则是在每次成功的 SaveChanges() 之后清除更改跟踪器。除此之外,您当然必须避免长运行 事务,这样 DbContext 就不会长时间保持 DbConnection 打开状态,但无论如何您都必须这样做。关键是具有空更改跟踪器的 DbContext 可以长期存在。
使用短期 DbContext 是可能的,但您失去了 Change Tracker 和 .Local ObservableCollection 的服务,这使得数据绑定非常容易。所以这不是灵丹妙药。
那么关于手头的问题,如果您有 DbContext-per-form,并且您有实体的表单到表单通信,最终由不同的 DbContext 保存,您真的别无选择,在发送之前断开实体与其主 DbContext 的连接。
或者这可能表明这两个表单确实应该共享一个视图状态,并且您应该创建一个包含 DbContext 和实体的显式视图状态对象,并且在表单之间共享它们。
看看智能客户端的Model-View-ViewModel (MVVM) pattern which introduces a distinction between the View (form) and the ViewModel, the data that models the use case user's interaction with the app. It's a useful pattern and is very widely used in XAML-based smart clients. Also XAML is (still) the future,对学习很有帮助。