【问题标题】:Entity Framework (6.x), Computed Columns and INotify实体框架 (6.x)、计算列和 INotify
【发布时间】:2014-04-16 17:46:34
【问题描述】:

我正在使用实体框架的 DB First 实现,并且遇到了需要计算列以及与视图交互的问题...

场景:

用户有名字和姓氏。在列表框中,我想使用从 FirstName 和 LastName 生成的显示名称。一般来说,足够简单。当名字或姓氏被编辑时,问题就出现了。我已经使用 INotifyPropertyChanged 扩展了我的实体,并在 T4 模板中实现了它。我扩展了 User 实体以创建 DisplayName 属性。在视图中,我使用基于 DisplayName 的 CollectionViewSouorce。

当用户的姓名被编辑,但由于更改的是 FirstName 或 LastName 而不是 DisplayName 而没有发生通知时,就会出现此问题。所以 CollectionViewSource 永远不会收到 DisplayName 的更改通知。

我可以手动将 OnPropertyChanged("DisplayName") 添加到 FirstName 和 LastName 属性中的 User 实体,但下次我从 DB 更新模型时,它会被覆盖。

关于如何进行这项工作的任何想法?

谢谢。

J

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    我会选择以下选项之一:

    • 创建 partial class User 到您的 User 实体,并在其中实现 OnFirstNameChanged,OnLastNameChanged 方法,当您从模型重新生成类时,该类保持不变。

    • 处理您的 ObjectContext 的 context.ObjectStateManager.ObjectStateManagerChanged 事件 http://msdn.microsoft.com/en-us/library/system.data.objects.objectstatemanager%28v=vs.100%29.aspx

    • FirstNameLastName属性设置器生成时,调整t4模板(根据你的问题你知道如何处理)调用自定义方法。

    【讨论】:

      【解决方案2】:

      记录在案……

      我使用了部分类扩展,只要更改和保存组成属性,就以编程方式为 DisplayName 触发 OnPropertyChanged。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-17
        • 1970-01-01
        • 1970-01-01
        • 2014-11-08
        • 2014-07-28
        • 1970-01-01
        • 1970-01-01
        • 2013-10-30
        相关资源
        最近更新 更多