using IRaCIS.Core.Domain.Models;
using System;
using System.Linq;
using System.Linq.Expressions;
namespace IRaCIS.Core.Domain.Interfaces
{
///
/// 工作单元接口
/// 适合在一下情况使用:
/// 1 在同一事务中进行多表操作
/// 2 需要多表联合查询
/// 因为架构采用的是EF访问数据库,暂时可以不用考虑采用传统Unit Work的注册机制
///
public interface IUnitWork
{
T FindSingle(Expression> exp = null) where T : class;
bool IsExist(Expression> exp) where T : class;
IQueryable Find(Expression> exp = null) where T : class;
IQueryable Find(int pageindex = 1, int pagesize = 10, string orderby = "",
Expression> exp = null) where T : class;
int GetCount(Expression> exp = null) where T : class;
void Add(T entity) where T : Entity;
void BatchAdd(T[] entities) where T : Entity;
///
/// 更新一个实体的所有属性
///
void Update(T entity) where T : class;
void Delete(T entity) where T : class;
///
/// 按指定的ID进行批量更新
///
void Update(Expression> identityExp, T entity) where T : class;
///
/// 实现按需要只更新部分更新
/// 如:Update(u =>u.Id==1,u =>new User{Name="ok"}) where T:class;
///
/// 更新条件
/// 更新后的实体
void Update(Expression> where, Expression> entity) where T : class;
///
/// 批量删除
///
void Delete(Expression> exp) where T : class;
void Save();
void ExecuteSql(string sql);
}
}