我是实体框架的新手,对ObjectContext
“数据库优先”WinForm 应用程序中的生命周期有疑问。
为了便于说明,假设我正在创建一个动物物种登记册。
在表格的左侧,我列出了动物物种(牛、猪、狗等——我认为这些是属而不是物种,但没关系!)。
在表格的右侧,我有文本框、组合框等来显示和允许编辑所选物种的属性。
当用户在左侧选择一个物种时,我使用:
var species = context.Single(x => x.id == speciesID);
然后将右边的各种控件绑定到species
.
其中一些属性(例如栖息地)是从组合框中选择的(在表单加载时从数据库中填充。我在数据库中使用代理键),这意味着我认为我需要在表单的生命周期内保持相同的上下文。
我认为这有两个问题:
用户可以在上下文的生命周期内对许多不同的物种(存在数百个)进行更改,使其变得臃肿。
理想情况下,我想在选择新物种时提示用户是否希望在更改之前将更改保存到当前物种(如果脏)。那么我该如何丢弃更改——如何让上下文忘记它曾经看到过的对象?
另一种方法是每次用户选择一个新物种时使用一个新的上下文,但这意味着每次都重新填充几个组合框,以便它们在相同的上下文中创建并且可以绑定到。
我错过了什么吗?
非常感谢