0

エンティティ フレームワーク モデルの最初のセットアップでリポジトリ パターンを使用しています。私のベース リポジトリ クラスには、典型的な CRUD メソッドがあります。EF はオブジェクトの変更を追跡するのに、なぜ Update CRUD メソッドが必要なのですか? Update を呼び出さずに、リポジトリにクエリを実行してオブジェクトを変更し、コミットするだけです。EF は、Modified オブジェクト状態で変更されたすべてのオブジェクトを自動的に更新します。ありがとう

public class BaseRepository<T> : IRepository<T> where T : class
{
  private ObjectSet<T> _set;
  private readonly IDatabaseFactor _databaseFactory;

  protected MyDataContext DataContext
  {
    get{ return _databaseFactory.DataContext;}
  }


  public BaseRepository(IDatabaseFactory dbFactory)
  {
    _databaseFactory = dbFactory;
        _set = _databaseFactory.DataContext.CreateOjbectSet<T>();
  }

  public virtual IQueryable<T> GetQuery()
  {
    return _set;
  }

  public virtual void Insert(T entity)
  {
    _set.AddObject(entity);
  }

  public virtual void Delete(T entity)
  {
    _set.DeleteObject(entity);
  }

  public virtual void Update(T entity)
  {
    _context.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
  }
}
4

1 に答える 1

0

リポジトリは、その実装から抽象化する必要があります。つまり、インターフェイスの下に任意の実装を含めることができます。この分離の要点は、BaseRepository を使用するコードを変更せずに BaseRepository を完全に書き直すことができるようにすることです (これを使用するコードは IRepository に基づいている必要があるため)

1 つの例は、Entity Framework と WCF Data Services です。どちらも下で EF と LINQ を使用しますが、WCF Data Services はデータ コンテキストで Update メソッドを呼び出して、データを送信するための URL を構築する必要があります。

于 2012-08-10T01:47:22.403 に答える