【问题标题】:Is there a DbSet<TEntity>.Local equivalent in Entity Framework 7?Entity Framework 7 中是否有 DbSet<TEntity>.Local 等效项?
【发布时间】:2015-11-20 04:46:00
【问题描述】:

我需要一个

ObservableCollection<TEntity>

在 EF7 中,

DbSet<TEntity>.Local

似乎不存在;

有什么解决办法吗?

【问题讨论】:

    标签: c# entity-framework entity-framework-core


    【解决方案1】:

    EntityFramework(RC1-final)的当前版本没有 DbSet.Local 功能。但!您可以使用当前的扩展方法实现类似的效果:

    public static class Extensions
    {
        public static ObservableCollection<TEntity> GetLocal<TEntity>(this DbSet<TEntity> set)
            where TEntity : class
        {
            var context = set.GetService<DbContext>();
            var data = context.ChangeTracker.Entries<TEntity>().Select(e => e.Entity);
            var collection = new ObservableCollection<TEntity>(data);
    
            collection.CollectionChanged += (s, e) =>
            {
                if (e.NewItems != null)
                {
                    context.AddRange(e.NewItems.Cast<TEntity>());
                }
    
                if (e.OldItems != null)
                {
                    context.RemoveRange(e.OldItems.Cast<TEntity>());
                }
            };
    
            return collection;
        }
    }
    

    注意:如果您查询更多数据,它不会刷新列表。不过,它会将列表的更改同步回更改跟踪器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-27
      • 2019-03-09
      • 1970-01-01
      • 2013-12-28
      相关资源
      最近更新 更多