将Entity Framework从4.4升级到6.1后,WPF数据绑定无法按预期工作

时间:2015-02-25 10:12:07

标签: c# .net wpf entity-framework

我有一个使用Prism / Unity,.Net 4和Entity Framework 4.4的WPF应用程序。 做了.Net和EF的测试升级。

.Net到4.5.1和EF到6.1。使用Entity Framework我还使用了DbContext而不是ObjectContext。

在一些初始问题之后,我可以获得构建解决方案,但在测试应用程序时出现了一些问题。我有不同的看法,我使用两个(DevExpress)gridcontrols。一个将绑定到ViewModel中的ObservableCollection,另一个绑定到第一个gridcontrol的选定项目中的(子)集合。

升级后,添加到所选项目“子集合”的任何对象都不会立即显示/反映在第二个网格控件中。 这在升级之前总是有效,有什么变化?

1 个答案:

答案 0 :(得分:0)

行为更改的原因是DbContext的T4模板不使用实现INotifyCollectionChanged的集合。解决方法是修改T4模板(在xxModel.tt文件中):

  • 打开xxModel.tt文件
  • 使用“ObservableCollection”查找并替换“ICollection”的两个出现。它们大致位于第296和484行
  • 使用“ObservableCollection”查找并替换“HashSet”的第一次出现。此事件大约位于第50行。请勿替换代码中稍后发现的第二次出现的HashSet。
  • 使用“System.Collections.ObjectModel”查找并替换“System.Collections.Generic”的唯一匹配项。它大约位于第424行。
  • 保存xxModel.tt文件。这应该导致实体的代码被重新生成。如果代码未自动重新生成,则右键单击该文件并选择“运行自定义工具”。

我在下面的文章“更新数据绑定的代码生成”标题下找到了上述提示:Databinding with WPF

我还在DevExpress上提出了一个支持案例,更详细地解释了这个问题:https://www.devexpress.com/Support/Center/Question/Details/T212183

希望这也有助于其他人。