UnitOfWork.cs 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 UnitOfWork(HRDataContext _context
  24. , IPermissionRepository permission
  25. , ICompanyRepository company
  26. , IUserTaskRepository userTask
  27. , IProjectRepository project
  28. , IUserTaskHistoryRepository projectHistory
  29. , ITaskStatusRepository userTaskStatus
  30. ,IUserTaskAttachmentRepository userTaskAttachment
  31. , ITeamRepository teamRepository
  32. , IMeetingRepository meetingRepository
  33. )
  34. {
  35. context = _context;
  36. this.Permission = permission;
  37. this.Company = company;
  38. this.UserTask = userTask;
  39. this.Project = project;
  40. this.UserTaskHistory = projectHistory;
  41. this.UserTaskStatus = userTaskStatus;
  42. this.UserTaskAttachment = userTaskAttachment;
  43. this.Team = teamRepository;
  44. this.Meeting = meetingRepository;
  45. }
  46. public async Task<int> CompleteAsync()
  47. {
  48. try
  49. {
  50. return await context.SaveChangesAsync();
  51. }
  52. catch (Exception ex)
  53. {
  54. RollbackTran();
  55. throw ex;
  56. }
  57. }
  58. public object GetRepositoryByName(string name)
  59. {
  60. Type type = this.GetType();
  61. PropertyInfo info = type.GetProperty(name);
  62. if (info == null)
  63. throw new AppException(ExceptionEnum.PropertyNotAccess, name, type.FullName);
  64. //type.FullName, String.Format("A property called {0} can't be accessed for type {1}.", name));
  65. return info.GetValue(this, null);
  66. }
  67. public void BeginTran()
  68. {
  69. context.Database.BeginTransaction();
  70. }
  71. public void CommitTran()
  72. {
  73. context.Database.CommitTransaction();
  74. }
  75. public void RollbackTran()
  76. {
  77. var transaction = context.Database.CurrentTransaction;
  78. if (transaction != null)
  79. context.Database.RollbackTransaction();
  80. }
  81. }
  82. }