实体框架 - 对象上下文生命周期

本文关键字:生命 周期 上下文 对象 框架 实体 | 更新日期: 2023-09-27 17:56:23

我是实体框架的新手,对'数据库优先'WinForm 应用程序中ObjectContext生命周期有疑问。

为了便于说明,假设我正在创建一个动物物种登记册。

  • 在表格的左侧,我列出了动物物种(牛,猪,狗等 - 我认为这些是属而不是物种,但没关系!

  • 在表单的右侧,我有文本框,组合框等来显示并允许编辑所选物种的属性。

当用户在左侧选择一个物种时,我使用:

var species = context.Single(x =>  x.id == speciesID);

然后将右侧的各种控件绑定到 species

其中一些属性(如栖息地)是从组合框(加载表单时从数据库中填充的)中选择的。我在数据库中使用代理键),这意味着我认为我需要在表单的生命周期内保持相同的上下文。

我认为这有两个问题:

  1. 用户可以在上下文的生命周期内对许多不同的物种(存在数百个)进行更改,使其变得臃肿。

  2. 理想情况下,我想在选择新物种时提示用户是否希望在更改之前保存对当前物种的更改(如果脏)。那么我如何放弃更改 – 如何使上下文忘记它曾经见过对象?

另一种方法是在用户每次选择新物种时使用新上下文,但这意味着每次都重新填充多个组合框,以便它们在同一上下文中创建并且可以绑定到。

我错过了什么吗?

非常感谢

实体框架 - 对象上下文生命周期

我建议使用关于物种变化的新上下文 - 这将解决在需要时撤消更改的问题。

我不明白为什么每次丢弃上下文时都需要重新填充组合框。我假设这些实体不会在物种被修改的同时被修改。因此,您可以在这些实体上使用 Attach 方法,使它们成为当前对象上下文的一部分(或者您可以使用所选实体的键/ID 从具有当前对象上下文的数据库中查询实体)。

我想你会在本主题中找到答案:

撤消实体框架实体中的更改