2

いくつかのリポジトリがあり、それらにインターフェースを実装させたいのですが、実装方法は同じでなければなりません-選択、挿入など。しかし、実装方法は変更されます。いくつかの代替案がありますが、より良いものはどれですか?

 interface IRepository
    {
        List<T> Select();
        int Insert(T); 
    }
4

1 に答える 1

7

インターフェイスを作成し、そのインターフェイスをクラスに実装できます。

  public interface IRepository<T> where T:class
    {
        IQueryable<T> GetAll();
        T GetById(object id);
        void Insert(T entity);
        void Update(T entity);         
    }

ここでも、リポジトリ パターン作業単位パターンを使用できます。

 public class Repository<T>:IRepository<T> where T:class
    {
        private DbContext context = null;
        private DbSet<T> dbSet = null;

        public Repository(DbContext context)
        {
            this.context = context;
            this.dbSet = context.Set<T>();
        }

        #region IRepository

        public void Insert(T entity)
        {
            dbSet.Add(entity);
        }

        public IQueryable<T> GetAll()
        {
            return dbSet;
        }

        public void Update(T entity)
        {
            if (entity == null)
                throw new ArgumentNullException("entity");

            this.context.SaveChanges();
        }

       #endregion
    }

この場合、任意のタイプのオブジェクトを渡すことができます。詳細と例については、こちらを確認してください

于 2013-10-20T18:59:54.013 に答える