2015-11-20 30 views

答えて

7

現在のバージョンの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; 
    } 
} 

注:追加のデータを照会すると、リストは更新されません。それは変更トラッカーに戻ってリストの変更を同期します。

関連する問題