繁体   English   中英

实体框架-ObjectContext生命周期

[英]Entity Framework - ObjectContext lifecycle

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

为了说明起见,假设我要创建一个动物物种登记簿。

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

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

当用户选择左侧的物种时,我会使用:

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

然后约束species权利的各种控制。

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

我认为这有两个问题:

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

  2. 理想情况下,如果他们希望在更改之前将更改保存到当前物种(如果脏的话),那么我想在用户选择新物种时提示用户。 然后,我该如何丢弃更改–如何使上下文忘记曾经看到过的对象?

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

我想念什么吗?

非常感谢

我想您会在以下主题中找到答案:

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

我建议使用有关物种变化的新环境-如果需要,可以解决撤销变化的问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM