using Microsoft.EntityFrameworkCore.ChangeTracking;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace IRaCIS.Core.Domain
{
///
/// 仓储接口
///
///
public interface IRepository where T : class
{
IQueryable GetAll();
T Add(T t);
IEnumerable AddRange(IEnumerable t);
void Delete(T t);
bool Delete(Expression> exp);
void Update(T t);
Task AddOrUpdateAsync(T t);
bool Update(Expression> where, Expression> entity);
bool IsExist(Expression> exp);
int GetCount(Expression> exp=null);
T FindSingleOrDefault(Expression> exp = null);
IQueryable Find(Expression> exp = null);
IQueryable Find(int pageSize, int pageIndex, bool isAsc, Expression> orderByLambda, Expression> whereLambda=null);
IQueryable Find(int pageSize, int pageIndex, bool isAsc, string propName,
Expression> whereLambda);
bool SaveChanges();
ValueTask> AddAsync(T entity);
Task DeleteAsync(Expression> whereLambda);
Task UpdateAsync(Expression> whereLambda, Expression> entity);
Task IsExistAsync(Expression> whereLambda);
Task GetFirstOrDefaultAsync(Expression> whereLambda);
Task GetCountAsync(Expression> whereLambda = null);
Task SaveChangesAsync();
}
}