using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading; using System.Threading.Tasks; using iPackage.Core.Web.Extensions; using iPackage.Models.Entity; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; namespace iPackage.Core.Web.Models.Entity { public class ApplicationIdentityContext : IdentityDbContext { private Assembly _projectAssembly; public ApplicationIdentityContext(DbContextOptions options) : base(options) { _projectAssembly = options.GetExtension().ProjectAssembly; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); var entitiesAssembly = _projectAssembly; modelBuilder.RegisterAllEntities(entitiesAssembly); modelBuilder.RegisterEntityTypeConfiguration(entitiesAssembly); modelBuilder.AddRestrictDeleteBehaviorConvention(); modelBuilder.AddSequentialGuidForIdConvention(); modelBuilder.AddPluralizingTableNameConvention(); } public override int SaveChanges() { var entries = ChangeTracker .Entries() .Where(e => e.Entity is ApiEntity && (e.State == EntityState.Added)); foreach (var entityEntry in entries) { if (entityEntry.State == EntityState.Added) { ((ApiEntity)entityEntry.Entity).CreationTime = DateTime.Now; } } return base.SaveChanges(); } public override Task SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken()) { var entries = ChangeTracker .Entries() .Where(e => e.Entity is ApiEntity && (e.State == EntityState.Added)); foreach (var entityEntry in entries) { if (entityEntry.State == EntityState.Added) { ((ApiEntity)entityEntry.Entity).CreationTime = DateTime.Now; } } return base.SaveChangesAsync(cancellationToken); } } public class ApplicationIdentityContext : IdentityDbContext where TAdmin : IdentityUser where TKey : IEquatable where TRole : IdentityRole { private Assembly _projectAssembly; public ApplicationIdentityContext(DbContextOptions options) : base(options) { _projectAssembly = options.GetExtension().ProjectAssembly; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); var entitiesAssembly = _projectAssembly; modelBuilder.RegisterAllEntities(entitiesAssembly); modelBuilder.RegisterEntityTypeConfiguration(entitiesAssembly); modelBuilder.AddRestrictDeleteBehaviorConvention(); modelBuilder.AddSequentialGuidForIdConvention(); modelBuilder.AddPluralizingTableNameConvention(); } public override int SaveChanges() { var entries = ChangeTracker .Entries() .Where(e => e.Entity is ApiEntity && (e.State == EntityState.Added)); foreach (var entityEntry in entries) { if (entityEntry.State == EntityState.Added) { ((ApiEntity)entityEntry.Entity).CreationTime = DateTime.Now; } } return base.SaveChanges(); } public override Task SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken()) { var entries = ChangeTracker .Entries() .Where(e => e.Entity is ApiEntity && (e.State == EntityState.Added)); foreach (var entityEntry in entries) { if (entityEntry.State == EntityState.Added) { ((ApiEntity)entityEntry.Entity).CreationTime = DateTime.Now; } } return base.SaveChangesAsync(cancellationToken); } } public class ApplicationContext : DbContext { private Assembly _projectAssembly; public ApplicationContext(DbContextOptions options) : base(options) { _projectAssembly = options.GetExtension().ProjectAssembly; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); var entitiesAssembly = _projectAssembly; modelBuilder.RegisterAllEntities(entitiesAssembly); modelBuilder.RegisterEntityTypeConfiguration(entitiesAssembly); modelBuilder.AddRestrictDeleteBehaviorConvention(); modelBuilder.AddSequentialGuidForIdConvention(); modelBuilder.AddPluralizingTableNameConvention(); } public override int SaveChanges() { var entries = ChangeTracker .Entries() .Where(e => e.Entity is ApiEntity && (e.State == EntityState.Added)); foreach (var entityEntry in entries) { if (entityEntry.State == EntityState.Added) { ((ApiEntity)entityEntry.Entity).CreationTime = DateTime.Now; } } return base.SaveChanges(); } public override Task SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken()) { var entries = ChangeTracker .Entries() .Where(e => e.Entity is ApiEntity && (e.State == EntityState.Added)); foreach (var entityEntry in entries) { if (entityEntry.State == EntityState.Added) { ((ApiEntity)entityEntry.Entity).CreationTime = DateTime.Now; } } return base.SaveChangesAsync(cancellationToken); } } }