using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Data.Entity.Infrastructure;
using System.Data.Entity;
using System.Linq.Expressions;
using Central.Control.Domain;
using Ant.Service.Common;
namespace MES.Production.Service
{
///
/// 所有的数据操作基类接口
/// add 作者: 季健国 QQ:181589805 by 2016-05-10
///
public interface IRepository where T : class
{
#region 数据对象操作
///
/// 数据上下文
///
DbContext Context { get; }
///
/// 数据上下文
///
MyConfig Config { get; }
///
/// 数据模型操作
///
DbSet dbSet { get; }
///
/// EF事务
///
DbContextTransaction Transaction { get; set; }
///
/// 事务提交结果
///
bool Committed { get; set; }
///
/// 提交事务
///
void Commit();
///
/// 回滚事务
///
void Rollback();
#endregion
#region 单模型操作
///
/// 获取实体
///
/// 主键
/// 实体
T Get(Expression> predicate);
///
/// 插入实体
///
/// 实体
/// ID
bool Save(T entity);
///
///
///
///
///
T SaveReturn(T entity);
///
/// 修改实体
///
/// 实体
bool Update(T entity);
///
/// 修改或保存实体
///
/// 实体
bool SaveOrUpdate(T entity, bool isEdit);
///
///
///
///
///
///
T SaveOrUpdateReturn(T entity, bool isEdit);
///
/// 删除实体
///
int Delete(Expression> predicate = null);
///
/// 执行SQL删除
///
int DeleteBySql(string sql, params DbParameter[] para);
///
/// 根据属性验证实体对象是否存在
///
bool IsExist(Expression> predicate);
///
/// 根据SQL验证实体对象是否存在
///
bool IsExist(string sql, params DbParameter[] para);
#endregion
#region 多模型操作
///
/// 增加多模型数据,指定独立模型集合
///
int SaveList(List t) where T1 : class;
///
/// 增加多模型数据,与当前模型一致
///
int SaveList(List t);
///
/// 更新多模型,指定独立模型集合
///
int UpdateList(List t) where T1 : class;
///
/// 更新多模型,与当前模型一致
///
int UpdateList(List t);
///
/// 批量删除数据,当前模型
///
int DeleteList(List t);
///
/// 批量删除数据,独立模型
///
int DeleteList(List t) where T1 : class;
#endregion
#region 存储过程操作
///
/// 执行增删改存储过程
///
object ExecuteProc(string procname, params DbParameter[] parameter);
///
/// 执行查询的存储过程
///
object ExecuteQueryProc(string procname, params DbParameter[] parameter);
#endregion
#region 查询多条数据
///
/// 获取集合 IQueryable
///
IQueryable LoadAll(Expression> predicate);
///
/// 获取集合 IList
///
List LoadListAll(Expression> predicate);
///
/// 获取DbQuery的列表
///
DbQuery LoadQueryAll(Expression> predicate);
///
/// 获取IEnumerable列表
///
IEnumerable LoadEnumerableAll(string sql, params DbParameter[] para);
///
/// 获取数据动态集合
///
System.Collections.IEnumerable LoadEnumerable(string sql, params DbParameter[] para);
///
/// 采用SQL进行数据的查询,并转换
///
List SelectBySql(string sql, params DbParameter[] para);
List SelectBySql(string sql, params DbParameter[] para);
///
/// 可指定返回结果、排序、查询条件的通用查询方法,返回实体对象
///
/// 实体对象
/// 排序字段类型
/// 数据结果,一般为object
/// 过滤条件,需要用到类型转换的需要提前处理与数据表一致的
/// 排序字段
/// 返回结果(必须是模型中存在的字段)
/// 排序方向,true为正序false为倒序
/// 实体集合
List QueryEntity(Expression> where, Expression> orderby, Expression> selector, bool IsAsc)
where TEntity : class
where TResult : class;
///
/// 可指定返回结果、排序、查询条件的通用查询方法,返回Object对象
///
/// 实体对象
/// 排序字段类型
/// 过滤条件,需要用到类型转换的需要提前处理与数据表一致的
/// 排序字段
/// 返回结果(必须是模型中存在的字段)
/// 排序方向,true为正序false为倒序
/// 自定义实体集合
List