C# 实体框架-ObjectContext生命周期
我不熟悉实体框架,对“数据库优先”WinForm应用程序中的C# 实体框架-ObjectContext生命周期,c#,entity-framework,C#,Entity Framework,我不熟悉实体框架,对“数据库优先”WinForm应用程序中的ObjectContext生命周期有疑问 为了便于说明,假设我正在创建一个动物物种登记册 在表格的左边,我有一个动物种类的列表(牛、猪、狗等)——我认为这些是属而不是种,但没关系 在表单的右侧,我有文本框、组合框等,可以显示并允许编辑所选物种的属性 当用户选择左侧的物种时,我使用: var species = context.Single(x => x.id == speciesID); 然后将右侧的各种控件绑定到物种 其
ObjectContext
生命周期有疑问
为了便于说明,假设我正在创建一个动物物种登记册
- 在表格的左边,我有一个动物种类的列表(牛、猪、狗等)——我认为这些是属而不是种,但没关系
- 在表单的右侧,我有文本框、组合框等,可以显示并允许编辑所选物种的属性
var species = context.Single(x => x.id == speciesID);
然后将右侧的各种控件绑定到物种
其中一些属性(如habitat)是从组合框中选择的(在加载表单时从数据库填充。我在数据库中使用代理键),这意味着我认为我需要在表单的生命周期中保持相同的上下文
我认为这有两个问题:
非常感谢我想你会在这个主题中找到答案:
我建议在物种变化上使用新的背景——这将解决在需要时撤销变化的问题
我不明白为什么每次丢弃上下文时都需要重新填充组合框。我假设这些实体不会在物种被修改的同时被修改。因此,您可以对这些实体使用方法使其成为当前对象上下文的一部分(或者使用所选实体的键/id从具有当前对象上下文的数据库中查询实体) 我认为放弃更改的最好方法是处理上下文并重新填充它。由于EF使用延迟加载(除非另有设置),所以您不会得到任何实际不使用的内容。EF上下文是通过工作单元模式使用的。谢谢,我喜欢第一个选项的声音,但是我如何从组合框中附加所有实体?假设我有
iquiryable栖息地代码>我是否需要枚举并调用每个附加?我不确定我是否理解您提到的第二个选项。@ChrisBeedie,您可以枚举所有栖息地并将它们附加到上下文,或者您只能在调用时附加所选栖息地以保存更改。在这两种情况下,您都可以使用通用代码来处理所有组合框。