|  |  | using Microsoft.EntityFrameworkCore;
 | 
						
						
						
							|  |  | using System;
 | 
						
						
						
							|  |  | using System.Collections.Generic;
 | 
						
						
						
							|  |  | using System.Linq;
 | 
						
						
						
							|  |  | using System.Linq.Expressions;
 | 
						
						
						
							|  |  | using System.Text;
 | 
						
						
						
							|  |  | using Txgy.EWS.Server.ICommon;
 | 
						
						
						
							|  |  | using Txgy.EWS.Server.IService;
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | namespace Txgy.EWS.Server.Service
 | 
						
						
						
							|  |  | {
 | 
						
						
						
							|  |  |     public class BaseService : IBaseService
 | 
						
						
						
							|  |  |     {
 | 
						
						
						
							|  |  |         protected DbContext Context { get; private set; }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |         public BaseService(IDbConnectionFactory contextFactory)
 | 
						
						
						
							|  |  |         {
 | 
						
						
						
							|  |  |             Context = contextFactory.CreateDbContext();
 | 
						
						
						
							|  |  |             Context.Database.EnsureCreated();//  对于数据库、表结构更新无效
 | 
						
						
						
							|  |  |         }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |         public void Commit()
 | 
						
						
						
							|  |  |         {
 | 
						
						
						
							|  |  |             this.Context.SaveChanges();
 | 
						
						
						
							|  |  |         }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |         public void Delete<T>(int Id) where T : class
 | 
						
						
						
							|  |  |         {
 | 
						
						
						
							|  |  |             T t = this.Find<T>(Id);//也可以附加
 | 
						
						
						
							|  |  |             if (t == null) throw new Exception("t is null");
 | 
						
						
						
							|  |  |             this.Context.Set<T>().Remove(t);
 | 
						
						
						
							|  |  |             this.Commit();
 | 
						
						
						
							|  |  |         }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |         public void Delete<T>(T t) where T : class
 | 
						
						
						
							|  |  |         {
 | 
						
						
						
							|  |  |             if (t == null) throw new Exception("t is null");
 | 
						
						
						
							|  |  |             this.Context.Set<T>().Attach(t);
 | 
						
						
						
							|  |  |             this.Context.Set<T>().Remove(t);
 | 
						
						
						
							|  |  |             this.Commit();
 | 
						
						
						
							|  |  |         }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |         public void Delete<T>(IEnumerable<T> tList) where T : class
 | 
						
						
						
							|  |  |         {
 | 
						
						
						
							|  |  |             foreach (var t in tList)
 | 
						
						
						
							|  |  |             {
 | 
						
						
						
							|  |  |                 this.Context.Set<T>().Attach(t);
 | 
						
						
						
							|  |  |             }
 | 
						
						
						
							|  |  |             this.Context.Set<T>().RemoveRange(tList);
 | 
						
						
						
							|  |  |             this.Commit();
 | 
						
						
						
							|  |  |         }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |         public T Find<T>(int id) where T : class
 | 
						
						
						
							|  |  |         {
 | 
						
						
						
							|  |  |             return this.Context.Set<T>().Find(id);
 | 
						
						
						
							|  |  |         }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |         public T Insert<T>(T t) where T : class
 | 
						
						
						
							|  |  |         {
 | 
						
						
						
							|  |  |             this.Context.Set<T>().Add(t);
 | 
						
						
						
							|  |  |             this.Commit();
 | 
						
						
						
							|  |  |             return t;
 | 
						
						
						
							|  |  |         }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |         public IEnumerable<T> Insert<T>(IEnumerable<T> tList) where T : class
 | 
						
						
						
							|  |  |         {
 | 
						
						
						
							|  |  |             this.Context.Set<T>().AddRange(tList);
 | 
						
						
						
							|  |  |             this.Commit();//写在这里  就不需要单独commit  不写就需要 
 | 
						
						
						
							|  |  |             return tList;
 | 
						
						
						
							|  |  |         }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |         public IQueryable<T> Query<T>(Expression<Func<T, bool>> funcWhere) where T : class
 | 
						
						
						
							|  |  |         {
 | 
						
						
						
							|  |  |             return this.Context.Set<T>().Where<T>(funcWhere);
 | 
						
						
						
							|  |  |         }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |         public void Update<T>(T t) where T : class
 | 
						
						
						
							|  |  |         {
 | 
						
						
						
							|  |  |             if (t == null) throw new Exception("t is null");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |             this.Context.Set<T>().Attach(t);//将数据附加到上下文,支持实体修改和新实体,重置为UnChanged
 | 
						
						
						
							|  |  |             this.Context.Entry<T>(t).State = EntityState.Modified;
 | 
						
						
						
							|  |  |             this.Commit();
 | 
						
						
						
							|  |  |         }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |         public void Update<T>(IEnumerable<T> tList) where T : class
 | 
						
						
						
							|  |  |         {
 | 
						
						
						
							|  |  |             foreach (var t in tList)
 | 
						
						
						
							|  |  |             {
 | 
						
						
						
							|  |  |                 this.Context.Set<T>().Attach(t);
 | 
						
						
						
							|  |  |                 this.Context.Entry<T>(t).State = EntityState.Modified;
 | 
						
						
						
							|  |  |             }
 | 
						
						
						
							|  |  |             this.Commit();
 | 
						
						
						
							|  |  |         }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |         public virtual void Dispose()
 | 
						
						
						
							|  |  |         {
 | 
						
						
						
							|  |  |             if (this.Context != null)
 | 
						
						
						
							|  |  |             {
 | 
						
						
						
							|  |  |                 this.Context.Dispose();
 | 
						
						
						
							|  |  |             }
 | 
						
						
						
							|  |  |         }
 | 
						
						
						
							|  |  |     }
 | 
						
						
						
							|  |  | }
 |