我有一个WinForms应用程序,它使用Entity Framework来查询数据库。查询从表中提取所有记录,以及从关联表中提取所有记录。我将父表的结果分配给BindingSource
并将其分配给另一个BindingSource
以访问子记录。父BindingSource
绑定到ComboBox
,子BindingSource
绑定到DataGridView
。这一切都按预期工作。
我的问题是:在某个时刻,我需要实现一个刷新功能来从数据库中提取所有记录以刷新视图。我目前正在使用它,但它只刷新父记录,而不是子记录。
我获得所需行为的唯一成功是使用ObjectQuery.Execute
选项使用MergeOption.NoTracking
。这会刷新父记录和子记录,但如果我没记错,我将失去所有跟踪记录。
如何更新子记录?我试图使用Include
方法并指定子记录表,但这没有影响。
答案 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();