DbContext刷新不会在DbSet <TEntity> .Local属性

时间:2019-06-19 14:07:05

标签: c# entity-framework-6 observablecollection dbcontext

我有一个WPF桌面应用程序,其中一个视图通过绑定到EF6 DbSet .Local属性来显示“ mytable”的所有记录。该应用程序还动态查找数据库更改为“ mytable”(由我的应用程序显示“ mytable”内容时由其他方引起) 并使用这些更改刷新我当前的视图/ mytable。要进行数据库刷新,我使用DispatcherTimer来定期刷新我的EF6 DbContext实体。

EF6代码:

public partial class Entities : DbContext
{
   public virtual DbSet<mytable> mytable { get; set; }
   ...

数据来源:

ObservableCollection<mytable> MyTable { get; set; } = Entities.mytable.Local;

显示mytable的元素的绑定:

ItemsSource="{Binding MyTable}"

DispatcherTimer的DbContext刷新:

((System.Data.Entity.Infrastructure.IObjectContextAdapter)Entities)
    .ObjectContext
    .Refresh(System.Data.Entity.Core.Objects.RefreshMode.StoreWins, Entities.mytable);

我面临的问题是,尽管“ mytable”的DbContext刷新成功并且DbSet .Local ObservableCollection已更新(我已经通过调试器进行了验证),但刷新过程似乎没有触发CollectionChanged事件,以便绑定到MyTable变量的视图中的元素可以理解以刷新自身。

ObjectContext.Refresh是否不会触发DbSet .Local集合中的CollectionChanged事件?如果没有,是否存在另一种更新DbContext的方法,以便正确触发事件?

编辑: 罪魁祸首实际上是DbSet .Local属性,该属性在删除记录时不会更新,因此不会为这些记录触发CollectionChanged事件。正确跟踪插入和更新: Update DbSet.Local after row deletion in the database

0 个答案:

没有答案