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 回答