ScientificReport
ScientificReportDbContext.cs
Go to the documentation of this file.
1 using System;
2 using System.Linq;
3 using System.Threading;
4 using System.Threading.Tasks;
5 using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
6 using Microsoft.EntityFrameworkCore;
13 
14 namespace ScientificReport.DAL.DbContext
15 {
16  public class ScientificReportDbContext : IdentityDbContext<UserProfile, UserProfileRole, Guid>
17  {
19  {
20  }
21 
22  public ScientificReportDbContext(DbContextOptions options) : base(options)
23  {
24  }
25 
26  public virtual DbSet<UserProfile> UserProfiles { get; set; }
27  public virtual DbSet<Article> Articles { get; set; }
28  public virtual DbSet<UserProfilesArticles> UserProfilesArticles { get; set; }
29  public virtual DbSet<Publication> Publications { get; set; }
30  public virtual DbSet<UserProfilesPublications> UserProfilesPublications { get; set; }
31  public virtual DbSet<Grant> Grants { get; set; }
32  public virtual DbSet<UserProfilesGrants> UserProfilesGrants { get; set; }
33  public virtual DbSet<ScientificWork> ScientificWorks { get; set; }
34  public virtual DbSet<UserProfilesScientificWorks> UserProfilesScientificWorks { get; set; }
35  public virtual DbSet<Review> Reviews { get; set; }
36  public virtual DbSet<Conference> Conferences { get; set; }
37  public virtual DbSet<ReportThesis> ReportTheses { get; set; }
38  public virtual DbSet<UserProfilesReportThesis> UserProfilesReportTheses { get; set; }
39  public virtual DbSet<ScientificInternship> ScientificInternships { get; set; }
40  public virtual DbSet<UserProfilesScientificInternships> UserProfilesScientificInternships { get; set; }
41  public virtual DbSet<Department> Departments { get; set; }
42  public virtual DbSet<Membership> Memberships { get; set; }
43  public virtual DbSet<Opposition> Oppositions { get; set; }
44  public virtual DbSet<PostgraduateDissertationGuidance> PostgraduateDissertationGuidances { get; set; }
45  public virtual DbSet<PostgraduateGuidance> PostgraduateGuidances { get; set; }
46  public virtual DbSet<ScientificConsultation> ScientificConsultations { get; set; }
47  public virtual DbSet<PatentLicenseActivity> PatentLicenseActivities { get; set; }
48  public virtual DbSet<ApplicantsPatentLicenseActivities> ApplicantsPatentLicenseActivities { get; set; }
49  public virtual DbSet<AuthorsPatentLicenseActivities> AuthorsPatentLicenseActivities { get; set; }
50 
51  public virtual DbSet<TeacherReport> TeacherReports { get; set; }
52  public virtual DbSet<TeacherReportsScientificWorks> TeacherReportsScientificWorks { get; set; }
53  public virtual DbSet<TeacherReportsArticles> TeacherReportsArticles { get; set; }
54  public virtual DbSet<TeacherReportsGrants> TeacherReportsGrants { get; set; }
55  public virtual DbSet<TeacherReportsMemberships> TeacherReportsMemberships { get; set; }
56  public virtual DbSet<TeacherReportsOppositions> TeacherReportsOppositions { get; set; }
57  public virtual DbSet<TeacherReportsPatents> TeacherReportsPatents { get; set; }
58  public virtual DbSet<TeacherReportsPostgraduateDissertationGuidances> TeacherReportsPostgraduateDissertationGuidances { get; set; }
59  public virtual DbSet<TeacherReportsPostgraduateGuidances> TeacherReportsPostgraduateGuidances { get; set; }
60  public virtual DbSet<TeacherReportsPublications> TeacherReportsPublications { get; set; }
61  public virtual DbSet<TeacherReportsReportThesis> TeacherReportsReportThesis { get; set; }
62  public virtual DbSet<TeacherReportsReviews> TeacherReportsReviews { get; set; }
63  public virtual DbSet<TeacherReportsScientificConsultations> TeacherReportsScientificConsultations { get; set; }
64  public virtual DbSet<TeacherReportsScientificInternships> TeacherReportsScientificInternships { get; set; }
65 
66  public virtual DbSet<DepartmentReport> DepartmentReports { get; set; }
67  public virtual DbSet<FacultyReport> FacultyReports { get; set; }
68 
69  public override int SaveChanges()
70  {
71  AddTimestamps();
72  return base.SaveChanges();
73  }
74 
75  public override async Task<int> SaveChangesAsync(
76  CancellationToken cancellationToken = default(CancellationToken))
77  {
78  AddTimestamps();
79  return await base.SaveChangesAsync(cancellationToken);
80  }
81 
82  private void AddTimestamps()
83  {
84  var entities = ChangeTracker.Entries().Where(x =>
85  x.Entity is ITrackable && (x.State == EntityState.Added || x.State == EntityState.Modified));
86 
87  foreach (var entity in entities)
88  {
89  if (entity.State == EntityState.Added)
90  {
91  ((ITrackable) entity.Entity).Created = DateTime.UtcNow;
92  }
93 
94  ((ITrackable) entity.Entity).Edited = DateTime.UtcNow;
95  }
96  }
97  }
98 }
override async Task< int > SaveChangesAsync(CancellationToken cancellationToken=default(CancellationToken))