using System.Collections.Generic; using System.Threading.Tasks; namespace FreeSql { public interface IBasicRepository : IReadOnlyRepository where TEntity : class { TEntity Insert(TEntity entity); List Insert(IEnumerable entitys); /// /// 清空状态数据 /// void FlushState(); /// /// 附加实体,可用于不查询就更新或删除 /// /// void Attach(TEntity entity); void Attach(IEnumerable entity); /// /// 附加实体,并且只附加主键值,可用于不更新属性值为null或默认值的字段 /// /// IBasicRepository AttachOnlyPrimary(TEntity data); int Update(TEntity entity); int Update(IEnumerable entitys); TEntity InsertOrUpdate(TEntity entity); /// /// 保存实体的指定 ManyToMany/OneToMany 导航属性(完整对比) /// 场景:在关闭级联保存功能之后,手工使用本方法 /// 例子:保存商品的 OneToMany 集合属性,SaveMany(goods, "Skus") /// 当 goods.Skus 为空(非null)时,会删除表中已存在的所有数据 /// 当 goods.Skus 不为空(非null)时,添加/更新后,删除表中不存在 Skus 集合属性的所有记录 /// /// 实体对象 /// 属性名 void SaveMany(TEntity entity, string propertyName); IUpdate UpdateDiy { get; } int Delete(TEntity entity); int Delete(IEnumerable entitys); #if net40 #else Task InsertAsync(TEntity entity); Task> InsertAsync(IEnumerable entitys); Task UpdateAsync(TEntity entity); Task UpdateAsync(IEnumerable entitys); Task InsertOrUpdateAsync(TEntity entity); Task SaveManyAsync(TEntity entity, string propertyName); Task DeleteAsync(TEntity entity); Task DeleteAsync(IEnumerable entitys); #endif } public interface IBasicRepository : IBasicRepository, IReadOnlyRepository where TEntity : class { int Delete(TKey id); #if net40 #else Task DeleteAsync(TKey id); #endif } }