有沒有DbSet <TEntity> 。實體框架7中的本地等價物?

c# entity-framework entity-framework-core

我需要一個

ObservableCollection<TEntity>

在EF7中,

ObservableCollection<TEntity>

似乎不存在;

有沒有解決方法?

一般承認的答案

當前版本的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;
    }
}

注意:如果您查詢更多數據,它將不會刷新列表。它會將列表中的更改同步回更改跟踪器。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因