using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace APT.Infrastructure.Core
{
///
/// 异步泛型主键实体仓储接口
///
/// 实体类型
/// 实体主键类型
public interface IRepositoryAsync where TEntity : EntityBase
{
///
/// 异步插入实体
///
/// 实体对象
/// 操作影响的行数
Task AddAsync(TEntity entity);
///
/// 异步批量插入实体
///
/// 实体对象集合
/// 操作影响的行数
Task AddAsync(IEnumerable entities);
///
/// 异步删除实体
///
/// 实体对象
/// 操作影响的行数
Task DeleteAsync(TEntity entity);
///
/// 异步删除指定编号的实体
///
/// 实体编号
/// 操作影响的行数
Task DeleteAsync(TKey key);
///
/// 异步删除所有符合特定条件的实体
///
/// 查询条件谓语表达式
/// 操作影响的行数
Task DeleteAsync(Expression> predicate);
///
/// 异步批量删除删除实体
///
/// 实体对象集合
/// 操作影响的行数
Task DeleteAsync(IEnumerable entities);
///
/// 异步更新实体对象
///
/// 实体对象
/// 操作影响的行数
Task UpdateAsync(TEntity entity);
///
/// 异步批量更新实体对象
///
/// 实体对象集合
/// 操作影响的行数
Task UpdateAsync(IEnumerable entities);
///
/// 批量更新
///
/// 查询条件谓语表达式
/// 更新表达式
/// 操作影响的行数
Task UpdateAsync(Expression> predicate, Expression> updateExpression);
///
/// 异步获取指定主键的实体
///
/// 实体主键
/// 符合主键的实体,不存在时返回null
Task GetByKeyAsync(TKey key);
///
/// 异步获取符合条件的实体
///
/// 查询条件谓语表达式
/// 符合条件的实体,不存在时返回null
Task GetAsync(Expression> predicate);
///
/// 异步获取记录数
///
///
Task CountAsync();
///
/// 异步获取符合条件的记录数
///
/// 查询条件谓语表达式
///
Task CountAsync(Expression> predicate = null);
///
/// 异步是否存在符合条件的记录
///
/// 查询条件谓语表达式
///
Task ExistsAsync(Expression> predicate);
}
public interface IRepositoryAsync : IRepositoryAsync where TEntity : EntityBase
{
}
public interface IIntRepositoryAsync : IRepositoryAsync where TEntity : EntityBase
{
}
}