EFCORE 仓储简单封装
创建BaseRepository 类
·
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. 使用仓储中的方法
}
更多推荐
所有评论(0)