Entity Framework Core 未正确调用 INotifyPropertyChanged

INotifyPropertyChanged not called correctly with Entity Framework Core

我有一个非常简单的实体,用于(作为视图模型的一部分)在我的 MVVM UWP 应用程序中显示 UI。我在 SQLite 数据库上使用延迟加载代理。

该实体有两个属性 - 名称和 ID。两者都正确引发了 PropertyChanged 事件。

我正在尝试实现一个重命名方法,它提供 UI 来重命名实体。这可以正常工作并且数据库已更新,但是 UI 绑定不会更新。

我绑定到 PropertyChanged 事件以尝试查看发生了什么,我注意到了一些奇怪的行为。更改名称时,发件人是代理人,代理人使用以前的名称。如果我再次更改名称,我会看到第一个重命名为 Name 属性.

如果我从等式中删除 Entity Framework 并使用相同的实体类型填充 UI,应用程序将按我预期的方式运行。由于某种原因 PropertyChanged 在更新代理值之前由 EF 引发。

我试过使用 ChangeTrackingStrategy 但没有效果(像这样):

        modelBuilder.Entity<Category>()
            .HasChangeTrackingStrategy(ChangeTrackingStrategy.ChangedNotifications);

我该如何解决这个问题?

对于使用 Entity Framework 与可观察对象的绑定遇到问题的其他人,我的根本问题是 SetProperty 方法,所有属性调用更新,在我的基础对象中被标记为虚拟.

效果是 EF 代理覆盖了它,这导致奇怪的事情发生 - UI 不更新,在文本框和末尾输入的字符移动到开头,等等。

请注意,EF 在幕后使用 DynamicProxy,它将代理所有虚拟方法。