IDbContext

IDbContext

数据库上下文接口,包含创建查询对象(IQuery)、插入数据、更新数据和删除数据等基本操作。

public interface IDbContext : IDisposable
{
    /* 获取关联的会话,通过该对象可以执行基本的 ado.net 操作(包括事务) */
    IDbSession Session { get; }

    /* 获取 IQuery 对象。主要数据查询的入口 */
    IQuery<TEntity> Query<TEntity>();
    IQuery<TEntity> Query<TEntity>(string table);

    /* 
     * 根据主键查询数据 
     * 如果实体是单一主键,可以传入的 key 与主键属性类型相同的值,亦可以传一个包含了与实体主键类型相同的属性的对象,如:new { Id = 1 }
     * 如果实体是多主键,则传入的 key 须是包含了与实体主键类型相同的属性的对象,如:new { Key1 = "1", Key2 = "2" }
     */
    TEntity QueryByKey<TEntity>(object key, bool tracking = false);
    TEntity QueryByKey<TEntity>(object key, string table, bool tracking = false);

    /* 快捷多表连接 */
    IJoiningQuery<T1, T2> JoinQuery<T1, T2>(Expression<Func<T1, T2, object[]>> joinInfo);
    IJoiningQuery<T1, T2, T3> JoinQuery<T1, T2, T3>(Expression<Func<T1, T2, T3, object[]>> joinInfo);
    IJoiningQuery<T1, T2, T3, T4> JoinQuery<T1, T2, T3, T4>(Expression<Func<T1, T2, T3, T4, object[]>> joinInfo);
    IJoiningQuery<T1, T2, T3, T4, T5> JoinQuery<T1, T2, T3, T4, T5>(Expression<Func<T1, T2, T3, T4, T5, object[]>> joinInfo);

    /* 原生 sql 查询,支持存储过程 */
    IEnumerable<T> SqlQuery<T>(string sql, params DbParam[] parameters);
    IEnumerable<T> SqlQuery<T>(string sql, CommandType cmdType, params DbParam[] parameters);

    /* 传入一个实体对象,插入数据。返回传入的实体对象(如果实体拥有自增列,会自动将自增值设置到实体相应的属性上) */
    TEntity Insert<TEntity>(TEntity entity);
    TEntity Insert<TEntity>(TEntity entity, string table);

    /* 传入一个 lambda 表达式树,向表插入指定的字段数据,返回主键值(如果主键是自增,则返回的就是自增值) */
    object Insert<TEntity>(Expression<Func<TEntity>> content);
    object Insert<TEntity>(Expression<Func<TEntity>> content, string table);

    /* 将一个实体集合插入数据库(批量处理)*/
    void InsertRange<TEntity>(List<TEntity> entities, bool keepIdentity = false);

    /* 传入一个实体,更新单条数据。返回受影响的行数 */
    int Update<TEntity>(TEntity entity);
    int Update<TEntity>(TEntity entity, string table);

    /* 传入 condition 条件和 body 表达式树,更新满足 condition 条件的指定的字段。返回受影响的行数 */
    int Update<TEntity>(Expression<Func<TEntity, bool>> condition, Expression<Func<TEntity, TEntity>> content);
    int Update<TEntity>(Expression<Func<TEntity, bool>> condition, Expression<Func<TEntity, TEntity>> content, string table);

    /* 传入一个实体,删除单条数据。返回受影响的行数 */
    int Delete<TEntity>(TEntity entity);
    int Delete<TEntity>(TEntity entity, string table);

    /* 传入 condition 条件表达式树,删除满足 condition 条件的数据。返回受影响的行数 */
    int Delete<TEntity>(Expression<Func<TEntity, bool>> condition);
    int Delete<TEntity>(Expression<Func<TEntity, bool>> condition, string table);

    /* 根据主键删除数据 */
    int DeleteByKey<TEntity>(object key);
    int DeleteByKey<TEntity>(object key, string table);

    /* 传入一个实体,让当前上下文跟踪该实体的属性变化。调用 'int Update<TEntity>(TEntity entity)' 方法更新数据时,只会更新实体被修改过的属性。 */
    void TrackEntity(object entity);
}