当前位置:   article > 正文

EFCore通用仓储类

EFCore通用仓储类

  1. using Microsoft.EntityFrameworkCore;
  2. using SmarkParking.Server.IService;
  3. using SmartParking.Server.IEFContext;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Linq.Expressions;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace SmarkParking.Server.Service
  11. {
  12. public class ServiceBase : IServiceBase
  13. {
  14. protected DbContext Context { get; private set; }
  15. public ServiceBase(IEFContext eFContext)
  16. {
  17. Context = eFContext.CreateDBContext();
  18. }
  19. public void Commit()
  20. {
  21. this.Context.SaveChanges(); // 直接保存就行了
  22. }
  23. public void Delete<T>(int Id) where T : class
  24. {
  25. T t = this.Find<T>(Id);
  26. if (t == null) throw new Exception("t is null"); // 如果是空就报错
  27. this.Context.Set<T>().Remove(t); // 删除这个
  28. this.Commit(); // 删完提交
  29. }
  30. public void Delete<T>(T t) where T : class
  31. {
  32. if (t == null) throw new Exception("t is null"); // 如果是空就报错
  33. this.Context.Set<T>().Attach(t); // 尊卑删除这个实体
  34. this.Context.Set<T>().Remove(t); // 删除这个
  35. this.Commit(); // 删完提交
  36. }
  37. public void Delete<T>(IEnumerable<T> tList) where T : class
  38. {
  39. // 将要删除的实体标记上
  40. foreach (var t in tList)
  41. {
  42. this.Context.Set<T>().Attach(t); // 要删除这个实体
  43. }
  44. this.Context.Set<T>().RemoveRange(tList); // 删除这个集合
  45. this.Commit(); // 删完提交
  46. }
  47. public T Find<T>(int id) where T : class
  48. {
  49. return this.Context.Set<T>().Find(id);
  50. }
  51. public T Insert<T>(T t) where T : class
  52. {
  53. this.Context.Set<T>().Add(t); // 添加
  54. this.Commit(); // 提交
  55. return t;
  56. }
  57. public IEnumerable<T> Insert<T>(IEnumerable<T> tList) where T : class
  58. {
  59. this.Context.Set<T>().AddRange(tList);
  60. this.Commit(); //
  61. return tList;
  62. }
  63. public IQueryable<T> Query<T>(Expression<Func<T, bool>> funcWhere) where T : class
  64. {
  65. return this.Context.Set<T>().Where<T>(funcWhere);
  66. }
  67. public void Update<T>(T t) where T : class
  68. {
  69. if (t == null) throw new Exception("t is null");
  70. this.Context.Set<T>().Attach(t); // 跟踪实体
  71. this.Context.Entry<T>(t).State = EntityState.Modified; // 标记为已修改
  72. this.Commit();
  73. }
  74. public void Update<T>(IEnumerable<T> tList) where T : class
  75. {
  76. // 跟踪和标记更改
  77. foreach (var t in tList)
  78. {
  79. this.Context.Set<T>().Attach(t);
  80. this.Context.Entry<T>(t).State = EntityState.Modified;
  81. }
  82. this.Commit();
  83. }
  84. public virtual void Dispose()
  85. {
  86. if (this.Context != null)
  87. this.Context.Dispose();
  88. }
  89. }
  90. }

使用举例子

var users = _loginService.Query<SysUserInfo>(u => u.UserName == username && u.Password == pwd);        // 他是Func<T, bool>类型做委托

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/402821
推荐阅读
相关标签
  

闽ICP备14008679号