/// <summary>
/// EF——对象操作-辅助类
/// </summary>
/// <typeparam name="M"></typeparam>
public class EF_Helper<M> where M : DbContext, new()
{
/// <summary>
/// DBEntities
/// </summary>
private M sd;
/// <summary>
/// 实例化DBEntities
/// </summary>
/// <returns></returns>
private M GetDBEntities()
{
if (sd == null)
{
sd = new M();
}
return sd;
}
/// <summary>
/// 添加数据到对象
/// </summary>
/// <typeparam name="T">对象</typeparam>
/// <param name="t">对象名</param>
/// <returns>true/false</returns>
public bool Add<T>(T t) where T : class
{
M sde = GetDBEntities();
sde.Set<T>().Add(t);
return sde.SaveChanges() > 0;
}
/// <summary>
/// 根据条件查询对象并返回对象集合
/// </summary>
/// <typeparam name="T">对象</typeparam>
/// <param name="p">条件</param>
/// <returns>对象集合list</returns>
public List<T> GetList<T>(Expression<Func<T, bool>> p) where T : class
{
M sde = GetDBEntities();
return sde.Set<T>().Where(p).ToList();
}
/// <summary>
/// 根据条件查询对象
/// </summary>
/// <typeparam name="T">对象</typeparam>
/// <param name="p">条件</param>
/// <returns>对象</returns>
public T GetNow<T>(Expression<Func<T, bool>> p) where T : class
{
M sde = GetDBEntities();
return sde.Set<T>().Where(p).FirstOrDefault();
}
/// <summary>
/// 根据条件获取临时对象,用于检测是否存在
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="p"></param>
/// <returns></returns>
public T GetisExistNow<T>(Expression<Func<T, bool>> p) where T : class
{
M sde = GetDBEntities();
return sde.Set<T>().Where(p).AsNoTracking().FirstOrDefault();
}
/// <summary>
/// 修改对象
/// </summary>
/// <typeparam name="T">对象</typeparam>
/// <param name="t">对象名称</param>
/// <returns>true/false</returns>
public bool Update<T>(T t) where T : class
{
M sde = GetDBEntities();
var ent = sde.Entry<T>(t);
ent.State = EntityState.Unchanged;
PropertyInfo[] pi = t.GetType().GetProperties();
for (int i = 0; i < pi.Length; i++)
{
object obj = pi[i].GetValue(t);
if (obj != null)
{
ent.Property(pi[i].Name).IsModified = true;
}
else
{
ent.Property(pi[i].Name).IsModified = true;
}
}
return sde.SaveChanges() > 0;
}
/// <summary>
/// 删除对象
/// </summary>
/// <typeparam name="T">对象</typeparam>
/// <param name="t">对象名</param>
/// <returns>true/false</returns>
public bool Delete<T>(T t) where T : class
{
M sde = GetDBEntities();
var ent = sde.Entry(t);
ent.State = EntityState.Deleted;
return sde.SaveChanges() > 0;
}
/// <summary>
/// 分页查询
/// </summary>
/// <typeparam name="T">对象</typeparam>
/// <typeparam name="TKey">int</typeparam>
/// <param name="select">查询字段</param>
/// <param name="where">查询条件</param>
/// <param name="order">排序字段</param>
/// <param name="pageIndex">当前页</param>
/// <param name="pageSize">查询数据条数</param>
/// <param name="Total">总共多少页</param>
/// <param name="orderby">排序</param>
/// getPageData<T, int>(t => new { t.ID, t.Name }, t => t.ID < 20, t => t.ID, 1, 10, out Total)
/// <returns></returns>
public List<dynamic> getPageData<T, TKey>(Expression<Func<T, dynamic>> select, Expression<Func<T, bool>> where, Expression<Func<T, TKey>> order, int pageIndex, int pageSize, out int Total, string orderby = "asc")
where T : class
{
M sde = GetDBEntities();
Total = sde.Set<T>().Where(where).Count();
if (orderby == "desc")
{
var list = sde.Set<T>().Where(where).OrderByDescending(order).Select(select).Skip((pageIndex - 1) * pageSize).Take(pageSize);
return list.ToList();
}
else
{
var list = sde.Set<T>().Where(where).OrderBy(order).Select(select).Skip((pageIndex - 1) * pageSize).Take(pageSize);
return list.ToList();
}
}
/// <summary>
/// 执行SQL语句(查询语句除外)
/// </summary>
/// <param name="sqlStr"></param>
/// <returns></returns>
public int ExecuteSql(string sqlStr)
{
M sde = GetDBEntities();
return sde.Database.ExecuteSqlCommand(sqlStr);
}
/// <summary>
/// 执行SQL语句查询
/// </summary>
/// <typeparam name="T">对象</typeparam>
/// <param name="t">对象名</param>
/// <param name="sqlStr"></param>
/// <returns></returns>
public List<T> SqlQuery<T>(string sqlStr)
{
M sde = GetDBEntities();
var info = sde.Database.SqlQuery<T>(sqlStr);
return info.ToList();
}