// ***********************************************************************
// Assembly : OpenAuth.Domain
// Author : yubaolee
// Created : 10-25-2015
//
// Last Modified By : yubaolee
// Last Modified On : 10-25-2015
// ***********************************************************************
//
// Copyright (c) www.cnblogs.com/yubaolee. All rights reserved.
//
// 仓储接口
// ***********************************************************************
using Microsoft.EntityFrameworkCore;
using System;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace Common.Repository.Interface
{
public interface IRepository where T : class where TDbContext : DbContext
{
///
/// 返回一个单独的实体,如果记录多于1个则取第一个
///
T FirstOrDefault(Expression> exp = null);
///
/// 判断指定条件的记录是否存在
///
bool Any(Expression> exp);
IQueryable Find(Expression> exp = null);
IQueryable Find(int pageindex = 1, int pagesize = 10, string orderby = "",
Expression> exp = null);
int Count(Expression> exp = null);
void Add(T entity);
void BatchAdd(T[] entities);
///
/// 更新一个实体的所有属性
///
void Update(T entity);
void Delete(T entity);
///
/// 实现按需要只更新部分更新
/// 如:Update(u =>u.Id==1,u =>new User{Name="ok"});
///
/// 更新条件
/// 更新后的实体
void Update(Expression> where, Expression> entity);
///
/// 批量删除
///
void Delete(Expression> exp);
void Save();
int ExecuteSqlRaw(string sql);
///
/// 使用SQL脚本查询
///
/// T为数据库实体
///
IQueryable FromSql(string sql, params object[] parameters);
///
/// 使用SQL脚本查询
///
/// T为非数据库实体,需要在DbContext中增加对应的DbQuery
///
IQueryable Query(string sql, params object[] parameters);
#region 异步接口
Task ExecuteSqlRawAsync(string sql);
Task AddAsync(T entity);
Task BatchAddAsync(T[] entities);
Task UpdateAsync(T entity);
Task DeleteAsync(T entity);
Task SaveAsync();
Task CountAsync(Expression> exp = null);
Task AnyAsync(Expression> exp);
Task FirstOrDefaultAsync(Expression> exp);
#endregion
}
}