231 lines
6.5 KiB
C#
231 lines
6.5 KiB
C#
|
|
|
|||
|
|
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
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|