public abstract class Repository<TEntity,TKey> where TEntity : class
   {
       private readonly DbSet<TEntity> _myDbSet;
       public SqlServerDbContext _myDbContext { get; } = null;
       public BaseRepository(SqlServerDbContext context)
       {
           _myDbContext = context;
           _myDbSet = _myDbContext.Set<TEntity>();
       }
       /// <summary>
       /// 新增
       /// </summary>
       /// <param name="entity">实体对象</param>
       /// <returns></returns>
       public bool Repository_Add(TEntity entity, bool isSaveChange = true)
       {

           _myDbSet.Add(entity);
           if (isSaveChange)
           {
               return _myDbContext.SaveChanges() > 0;
           }
           return false;
       }
       /// <summary>
       /// 根据主键查询
       /// </summary>
       /// <param name="id">主键</param>
       /// <returns></returns>
       public TEntity Repository_Get(TKey id)
       {
           if (id == null)
           {
               return default(TEntity);
           }
           return _myDbSet.Find(id);
       }
       /// <summary>
       /// 分页查询
       /// </summary>
       /// <param name="pageIndex"></param>
       /// <param name="pageSize"></param>
       /// <param name="predicate"></param>
       /// <param name="ordering"></param>
       /// <param name="isNoTracking"></param>
       /// <returns></returns>
       public List<TEntity> Repository_Get(int pageIndex, int pageSize, Expression<Func<TEntity, bool>> predicate=null, string ordering = "", bool isNoTracking = true)
       {
           if (predicate == null)
           {
               predicate = c => true;
           }
           var data = isNoTracking ? _myDbSet.Where(predicate).AsNoTracking() : _myDbSet.Where(predicate);
           if (!string.IsNullOrEmpty(ordering))
           {
               data = data.OrderBy(o => ordering);
           }
           data = data.Skip((pageIndex - 1) * pageSize)
                       .Take(pageSize);                      
           return data.ToList();
       }
       /// <summary>
       /// 查询数据集
       /// </summary>
       /// <param name="predicate"></param>
       /// <param name="ordering"></param>
       /// <param name="isNoTracking"></param>
       /// <returns></returns>
       public List<TEntity> Repository_Get(Expression<Func<TEntity, bool>> predicate = null, string ordering = "",bool isNoTracking =true)
       {
           if (predicate == null)
           {
               predicate = c => true;
           }
           var data = isNoTracking ? _myDbSet.Where(predicate).AsNoTracking() : _myDbSet.Where(predicate);
           if (!string.IsNullOrEmpty(ordering))
           {
               data = data.OrderBy(o => ordering);
           }          
           return data.ToList();
       }
       /// <summary>
       /// 根据ID删除数据
       /// </summary>
       /// <param name="id">主键</param>
       /// <returns></returns>
       public bool Repository_Remove(TKey id)
       {
           var entity =_myDbSet.Find(id);
           if (entity == null)
               return false;
           _myDbSet.Remove(entity);
           return _myDbContext.SaveChanges()>0 ? true :false;
       }
       /// <summary>
       /// 更新数据全更新
       /// </summary>
       /// <param name="entity"></param>
       /// <returns></returns>
       public bool Repository_Update(TEntity entity)
       {
           if (entity == null)
           {
               return false;
           }
           _myDbSet.Attach(entity);
           var entry = _myDbContext.Entry(entity);          
           entry.State = EntityState.Modified;//全字段更新
           return   _myDbContext.SaveChanges()>0 ? true:false;
          
       }
   }

1、创建Repository 类

2、自己的数据层Dao抽象为接口和实现(方便DI)

3、具体使用

  public class  YourDao : Repository<YourEntity, string>, IYourDao
  {
      public YourDao(YourDbContext context) : base(context)
      {
      }

     //接口实现

    // 直接使用base.   使用仓储中的方法   

 }

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐