using FineAdmin.Model;
using System;
using System.Collections.Generic;

namespace FineAdmin.IRepository
{
    public interface IBaseRepository<T> where T : class, new()
    {
        #region CRUD
        /// <summary>
        /// 根据主键返回实体
        /// </summary>
        T GetById(int Id);
        /// <summary>
        /// 新增
        /// </summary>
        int Insert(T model);
        /// <summary>
        /// 根据主键修改数据
        /// </summary>
        int UpdateById(T model);
        /// <summary>
        /// 根据主键修改数据 修改指定字段
        /// </summary>
        int UpdateById(T model, string updateFields);
        /// <summary>
        /// 根据主键删除数据
        /// </summary>
        int DeleteById(int Id);
        /// <summary>
        /// 根据主键批量删除数据
        /// </summary>
        int DeleteByIds(object Ids);
        /// <summary>
        /// 根据条件删除
        /// </summary>
        int DeleteByWhere(string where);
        #endregion
        /// <summary>
        /// 获取分页数据
        /// </summary>
        IEnumerable<T> GetByPage(SearchFilter filter, out long total);
        /// <summary>
        /// 获取分页数据 联合查询
        /// </summary>
        IEnumerable<T> GetByPageUnite(SearchFilter filter, out long total);
        /// <summary>
        /// 返回整张表数据
        /// returnFields需要返回的列,用逗号隔开。默认null,返回所有列
        /// </summary>
        IEnumerable<T> GetAll(string returnFields = null, string orderby = null);
        /// <summary>
        /// 根据查询条件获取数据
        /// </summary>
        IEnumerable<T> GetByWhere(string where = null, object param = null, string returnFields = null, string orderby = null);

    }
}