20230201_145_upperpc/InSituLaboratory.Service/BaseService.cs

231 lines
6.5 KiB
C#
Raw Permalink Normal View History

2024-03-11 05:12:02 +00:00
using InSituLaboratory.Base;
using InSituLaboratory.IService;
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage;
using System.Linq.Expressions;
namespace InSituLaboratory.Service
{
public class BaseService : IBaseService
{
protected readonly DbContext Context;
public BaseService(DbContext context)
{
Context = context;
}
#region Query
/// <summary>
/// Context <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EFcore<72><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Context
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="id"></param>
/// <returns></returns>
public T Find<T>(int id) where T : class
{
return Context.Set<T>().Find(id);
}
/// <summary>
/// <20><>Ӧ<EFBFBD>ñ<EFBFBD><EFBFBD><C2B6><EFBFBD>϶<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
//[Obsolete("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD>using <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽĿ¼<C4BF><C2BC><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>")]
public IQueryable<T> Set<T>() where T : class
{
return Context.Set<T>();
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>Ǻ<EFBFBD><C7BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶˸<CFB6><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="funcWhere"></param>
/// <returns></returns>
public IQueryable<T> Query<T>(Expression<Func<T, bool>> funcWhere) where T : class
{
return Context.Set<T>().Where(funcWhere);
}
/// <summary>
/// <20><>ҳ<EFBFBD><D2B3>ѯ
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="S"></typeparam>
/// <param name="funcWhere"></param>
/// <param name="pageSize"></param>
/// <param name="pageIndex"></param>
/// <param name="funcOrderby"></param>
/// <param name="isAsc"></param>
/// <returns></returns>
public PageResult<T> QueryPage<T, S>(Expression<Func<T, bool>> funcWhere, int pageSize, int pageIndex, Expression<Func<T, S>> funcOrderby, bool isAsc = true) where T : class
{
var list = Set<T>();
if (funcWhere != null)
{
list = list.Where(funcWhere);
}
if (isAsc)
{
list = list.OrderBy(funcOrderby);
}
else
{
list = list.OrderByDescending(funcOrderby);
}
PageResult<T> result = new PageResult<T>()
{
DataList = list.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(),
PageIndex = pageIndex,
PageSize = pageSize,
TotalCount = list.Count()
};
return result;
}
#endregion
#region Insert
/// <summary>
/// <20><>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>Commit
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// <returns></returns>
public T Insert<T>(T t) where T : class
{
Context.Set<T>().Add(t);
Commit();//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ͳ<EFBFBD><CDB2><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>commit <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD>Ҫ
return t;
}
public IEnumerable<T> Insert<T>(IEnumerable<T> tList) where T : class
{
Context.Set<T>().AddRange(tList);
Commit();//һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>sql
return tList;
}
#endregion
#region Update
/// <summary>
/// <20><>û<EFBFBD><C3BB>ʵ<EFBFBD>ֲ<EFBFBD>ѯ<EFBFBD><D1AF>ֱ<EFBFBD>Ӹ<EFBFBD><D3B8>µ<EFBFBD>,<2C><>ҪAttach<63><68>State
///
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD>context<78><74>ֻ<EFBFBD><D6BB><EFBFBD>ٷ<EFBFBD>װһ<D7B0><D2BB>(<28>ھ<EFBFBD><DABE><EFBFBD><EFBFBD><EFBFBD>service)
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
public void Update<T>(T t) where T : class
{
if (t == null) throw new Exception("t is null");
Context.Set<T>().Attach(t);//<2F><><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>֧<EFBFBD><D6A7>ʵ<EFBFBD><CAB5><EFBFBD>޸ĺ<DEB8><C4BA><EFBFBD>ʵ<EFBFBD><EFBFBD><E5A3AC><EFBFBD><EFBFBD>ΪUnChanged
Context.Entry(t).State = EntityState.Modified;
Commit();//<2F><><EFBFBD><EFBFBD> Ȼ<><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪUnChanged
}
public void Update<T>(IEnumerable<T> tList) where T : class
{
foreach (var t in tList)
{
Context.Set<T>().Attach(t);
Context.Entry(t).State = EntityState.Modified;
}
Commit();
}
#endregion
#region Delete
/// <summary>
/// <20>ȸ<EFBFBD><C8B8><EFBFBD> <20><>ɾ<EFBFBD><C9BE>
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
public void Delete<T>(T t) where T : class
{
if (t == null) throw new Exception("t is null");
Context.Set<T>().Attach(t);
Context.Set<T>().Remove(t);
Commit();
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӷǼ<D3B7>ʱcommit<69><EFBFBD>ģ<EFBFBD>
/// <20><><EFBFBD><EFBFBD>protected
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="Id"></param>
public void Delete<T>(int Id) where T : class
{
T t = Find<T>(Id);//Ҳ<><D2B2><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD>
if (t == null) throw new Exception("t is null");
Context.Set<T>().Remove(t);
Commit();
}
public void Delete<T>(IEnumerable<T> tList) where T : class
{
foreach (var t in tList)
{
Context.Set<T>().Attach(t);
}
Context.Set<T>().RemoveRange(tList);
Commit();
}
#endregion
#region Other
/// <summary>
/// <20><>ʡ<EFBFBD><CAA1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SaveChange <20><><EFBFBD>ǰѶ<C7B0><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳһ<CDB3>
/// </summary>
public void Commit()
{
Context.SaveChanges();
}
public IQueryable<T> ExcuteQuery<T>(string sql, SqlParameter[] parameters) where T : class
{
return null;
}
public void Excute<T>(string sql, SqlParameter[] parameters) where T : class
{
IDbContextTransaction trans = null;
//DbContextTransaction trans = null;
try
{
trans = Context.Database.BeginTransaction(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//this.Context.Database.ExecuteSqlRaw(sql, parameters);
trans.Commit();
}
catch (Exception)
{
if (trans != null)
trans.Rollback();
throw;
}
}
public virtual void Dispose()
{
if (Context != null)
{
Context.Dispose();
}
}
#endregion
}
}