刷新包含使用ObjectQuery.Execute的导航属性

时间:2012-01-27 23:01:49

标签: c# entity-framework data-binding

我有一个WinForms应用程序,它使用Entity Framework来查询数据库。查询从表中提取所有记录,以及从关联表中提取所有记录。我将父表的结果分配给BindingSource并将其分配给另一个BindingSource以访问子记录。父BindingSource绑定到ComboBox,子BindingSource绑定到DataGridView。这一切都按预期工作。

我的问题是:在某个时刻,我需要实现一个刷新功能来从数据库中提取所有记录以刷新视图。我目前正在使用它,但它只刷新父记录,而不是子记录。

我获得所需行为的唯一成功是使用ObjectQuery.Execute选项使用MergeOption.NoTracking。这会刷新父记录和子记录,但如果我没记错,我将失去所有跟踪记录。

如何更新子记录?我试图使用Include方法并指定子记录表,但这没有影响。

1 个答案:

答案 0 :(得分:0)

最好的选择就是创建新的上下文重新绑定控件并再次执行查询。刷新实体主要用于解决并发问题而不是维持长期生存环境。

如果您还想刷新关系,则必须为关系配置实体集以支持刷新。目前,您最有可能只配置当前对象集或对象查询,它将仅为主实体设置行为:

var principals = context.Principals.Include("Dependents").ToList();

context.Principals.MergeOption = MergeOption.OverwriteChanges;
context.Dependents.MergeOption = MergeOption.OverwriteChanges;
principals = context.Principals.Include("Dependents").ToList();