Существует ли эквивалент DbSet‹TEntity›.Local в Entity Framework 7?

мне нужен

ObservableCollection<TEntity>

in EF7,

DbSet<TEntity>.Local

кажется, не существует;

Есть ли обходной путь?


person Yanko Hernández Alvarez    schedule 20.11.2015    source источник


Ответы (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;
    }
}

Примечание. Список не будет обновляться, если вы запросите дополнительные данные. Тем не менее, он синхронизирует изменения в списке обратно в средство отслеживания изменений.

person Toddams    schedule 15.01.2016