UnitOfWork.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using System.Reflection;
  2. using MTWorkHR.Core.UnitOfWork;
  3. using MTWorkHR.Infrastructure.DBContext;
  4. using MTWorkHR.Core.IRepositories;
  5. using MTWorkHR.Core.Global;
  6. using MTWorkHR.Infrastructure.Repositories;
  7. using MTWorkHR.Core.IRepositories.Base;
  8. using MTWorkHR.Infrastructure.Entities;
  9. namespace MTWorkHR.Infrastructure.UnitOfWorks
  10. {
  11. public class UnitOfWork : IUnitOfWork
  12. {
  13. private readonly HRDataContext context;
  14. public IPermissionRepository Permission { get; }
  15. public ICompanyRepository Company { get; }
  16. public IUserTaskRepository UserTask { get; }
  17. public ITaskStatusRepository UserTaskStatus { get; }
  18. public IUserTaskHistoryRepository UserTaskHistory { get; }
  19. public IUserTaskAttachmentRepository UserTaskAttachment { get; }
  20. public IProjectRepository Project { get; }
  21. public ITeamRepository Team{ get; }
  22. public IMeetingRepository Meeting{ get; }
  23. public IAttendanceRepository Attendance { get; }
  24. public UnitOfWork(HRDataContext _context
  25. , IPermissionRepository permission
  26. , ICompanyRepository company
  27. , IUserTaskRepository userTask
  28. , IProjectRepository project
  29. , IUserTaskHistoryRepository projectHistory
  30. , ITaskStatusRepository userTaskStatus
  31. , IUserTaskAttachmentRepository userTaskAttachment
  32. , ITeamRepository teamRepository
  33. , IMeetingRepository meetingRepository
  34. , IAttendanceRepository attendance
  35. )
  36. {
  37. context = _context;
  38. this.Permission = permission;
  39. this.Company = company;
  40. this.UserTask = userTask;
  41. this.Project = project;
  42. this.UserTaskHistory = projectHistory;
  43. this.UserTaskStatus = userTaskStatus;
  44. this.UserTaskAttachment = userTaskAttachment;
  45. this.Team = teamRepository;
  46. this.Meeting = meetingRepository;
  47. Attendance = attendance;
  48. }
  49. public async Task<int> CompleteAsync()
  50. {
  51. try
  52. {
  53. return await context.SaveChangesAsync();
  54. }
  55. catch (Exception ex)
  56. {
  57. RollbackTran();
  58. throw ex;
  59. }
  60. }
  61. public object GetRepositoryByName(string name)
  62. {
  63. Type type = this.GetType();
  64. PropertyInfo info = type.GetProperty(name);
  65. if (info == null)
  66. throw new AppException(ExceptionEnum.PropertyNotAccess, name, type.FullName);
  67. //type.FullName, String.Format("A property called {0} can't be accessed for type {1}.", name));
  68. return info.GetValue(this, null);
  69. }
  70. public void BeginTran()
  71. {
  72. context.Database.BeginTransaction();
  73. }
  74. public void CommitTran()
  75. {
  76. context.Database.CommitTransaction();
  77. }
  78. public void RollbackTran()
  79. {
  80. var transaction = context.Database.CurrentTransaction;
  81. if (transaction != null)
  82. context.Database.RollbackTransaction();
  83. }
  84. }
  85. }