using FreeSql.Extensions.EntityUtil; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; #if net40 #else namespace FreeSql { partial class BaseRepository where TEntity : class { async virtual public Task DeleteAsync(Expression> predicate, CancellationToken cancellationToken = default) { var delete = _dbset.OrmDeleteInternal(null).Where(predicate); var sql = delete.ToSql(); var affrows = await delete.ExecuteAffrowsAsync(cancellationToken); _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw }); return affrows; } public virtual Task DeleteAsync(TEntity entity, CancellationToken cancellationToken = default) { _dbset.Remove(entity); return _db.SaveChangesAsync(cancellationToken); } public virtual Task DeleteAsync(IEnumerable entitys, CancellationToken cancellationToken = default) { _dbset.RemoveRange(entitys); return _db.SaveChangesAsync(cancellationToken); } async public virtual Task> DeleteCascadeByDatabaseAsync(Expression> predicate, CancellationToken cancellationToken = default) { var list = await _dbset.RemoveCascadeByDatabaseAsync(predicate, cancellationToken); var affrows = await _db.SaveChangesAsync(cancellationToken); return list; } async public virtual Task InsertAsync(TEntity entity, CancellationToken cancellationToken = default) { await _dbset.AddAsync(entity, cancellationToken); await _db.SaveChangesAsync(cancellationToken); return entity; } async public virtual Task> InsertAsync(IEnumerable entitys, CancellationToken cancellationToken = default) { await _dbset.AddRangeAsync(entitys, cancellationToken); await _db.SaveChangesAsync(cancellationToken); return entitys.ToList(); } public virtual Task UpdateAsync(TEntity entity, CancellationToken cancellationToken = default) { _dbset.Update(entity); return _db.SaveChangesAsync(cancellationToken); } public virtual Task UpdateAsync(IEnumerable entitys, CancellationToken cancellationToken = default) { _dbset.UpdateRange(entitys); return _db.SaveChangesAsync(cancellationToken); } async public virtual Task InsertOrUpdateAsync(TEntity entity, CancellationToken cancellationToken = default) { await _dbset.AddOrUpdateAsync(entity, cancellationToken); await _db.SaveChangesAsync(cancellationToken); return entity; } async public Task SaveManyAsync(TEntity entity, string propertyName, CancellationToken cancellationToken = default) { await _dbset.SaveManyAsync(entity, propertyName, cancellationToken); await _db.SaveChangesAsync(cancellationToken); } } partial class BaseRepository { public virtual Task DeleteAsync(TKey id, CancellationToken cancellationToken = default) => DeleteAsync(CheckTKeyAndReturnIdEntity(id), cancellationToken); public virtual Task FindAsync(TKey id, CancellationToken cancellationToken = default) => _dbset.OrmSelectInternal(CheckTKeyAndReturnIdEntity(id)).ToOneAsync(cancellationToken); public Task GetAsync(TKey id, CancellationToken cancellationToken = default) => _dbset.OrmSelectInternal(CheckTKeyAndReturnIdEntity(id)).ToOneAsync(cancellationToken); } } #endif