Пример #1
0
 private void _dataContext_PostSavingChanges(object sender, SavingChangesEventArgs e)
 {
     if (SavingChanges != null)
     {
         SavingChanges(this, e);
     }
 }
Пример #2
0
        private void ContextSavingChanges(object sender, SavingChangesEventArgs e)
        {
            var allEntity = ChangeTracker.Entries().Where(x => x.State == EntityState.Added || x.State == EntityState.Modified);

            foreach (var item in allEntity)
            {
                if (item.Entity is not null)
                {
                    if (item.Entity is Client client)
                    {
                        if (client is not null)
                        {
                            client.DateOfUpdate = DateTime.Now;
                        }
                    }
                    if (item.Entity is Founder founder)
                    {
                        if (founder is not null)
                        {
                            if (founder.Client is not null)
                            {
                                founder.Client.DateOfUpdate = DateTime.Now;
                            }
                            founder.DateOfUpdate = DateTime.Now;
                        }
                    }
                }
            }
        }
Пример #3
0
    private void DbContextAccessorWithAudit_SavingChanges(object?sender, SavingChangesEventArgs e)
    {
        var accessor     = (sender as DbContextAccessorWithAudit) !;
        var auditOptions = accessor.DataOptions.Audit;

        if (!auditOptions.Enabling)
        {
            return;
        }

        var auditingManager = accessor.GetService <IAuditingManager>();

#pragma warning disable EF1001 // Internal EF Core API usage.

        var entityEntries = ((IDbContextDependencies)accessor).StateManager
                            .GetEntriesForState(auditOptions.AddedState, auditOptions.ModifiedState,
                                                auditOptions.DeletedState, auditOptions.UnchangedState);

        accessor._audits = auditingManager.GetAudits(entityEntries.Select(s => new EntityEntry(s)));

#pragma warning restore EF1001 // Internal EF Core API usage.

        // 保存审计数据
        if (accessor._audits.Count > 0 && auditOptions.SaveAudits)
        {
            accessor.Set <Audit>().AddRange(accessor._audits);
        }
    }
Пример #4
0
        //public DbContextBase(DbContextOptions options)
        //    : base(options)
        //{
        //    SavingChanges += PreSave;
        //}
        //protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        //{
        //    if (!optionsBuilder.IsConfigured)
        //    {
        //        throw new Exception("数据库连接字符串未定义");
        //    }

        //}


        public virtual void  PreSave(object sender, SavingChangesEventArgs e)
        {
            var httpContext = HttpOptions.GetContext();
            var userToken   = httpContext.getUserToken();
            var userId      = userToken?.userid;
            var context     = (sender as DbContext);

            if (context != null)
            {
                var entitys = context.ChangeTracker.Entries();
                foreach (var entry in entitys)
                {
                    var thisEntity = (entry.Entity as EntityBase);
                    if (thisEntity == null)
                    {
                        continue;
                    }
                    switch (entry.State)
                    {
                    case EntityState.Detached:
                        break;

                    case EntityState.Unchanged:
                        break;

                    case EntityState.Deleted:
                        entry.State           = EntityState.Modified;
                        thisEntity.IsDeleted  = true;
                        thisEntity.ModifiedOn = DateTime.Now;
                        thisEntity.ModifiedBy = userId;
                        break;

                    case EntityState.Modified:
                        thisEntity.ModifiedOn = DateTime.Now;
                        thisEntity.ModifiedBy = userId;
                        break;

                    case EntityState.Added:
                        thisEntity.Id        = Guid.NewGuid();
                        thisEntity.CreatedOn = thisEntity.ModifiedOn = DateTime.Now;
                        thisEntity.CreatedBy = thisEntity.ModifiedBy = thisEntity.OwnerUserId = userId;
                        break;

                    default:
                        break;
                    }
                }
            }
        }
        /// <summary>
        /// 保存的时候,自动管理创建时间以及更新时间
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected override void SavingChangesEvent(object sender, SavingChangesEventArgs e)
        {
            var context = sender as TDbContext;
            // 获取所有新增和更新的实体
            var entities = context.ChangeTracker.Entries().Where(u => u.State == EntityState.Added || u.State == EntityState.Modified || u.State == EntityState.Deleted).ToList();
            //子实体被修改的时候,去这里找旧的值,这样就不用去数据库再找一遍了
            var deletedcache = entities.Where(d => d.State == EntityState.Deleted).ToDictionary(d => d.Entity.GetType().FullName + d.Property("Id").CurrentValue, d => d);

            foreach (var entity in entities)
            {
                switch (entity.State)
                {
                case EntityState.Added:
                    if (entity.Entity is not ICreationTime creationtimeentity)
                    {
                        continue;
                    }
                    if (creationtimeentity.CreatedTime == default)
                    {
                        creationtimeentity.CreatedTime = DateTime.Now;
                    }
                    break;

                case EntityState.Modified:
                    if (entity.Entity is ICreationTime)
                    {
                        var key = entity.Entity.GetType().FullName + entity.Property("Id").CurrentValue;
                        if (deletedcache.ContainsKey(key))
                        {
                            entity.Property(nameof(ICreationTime.CreatedTime)).CurrentValue = deletedcache[key].Property(nameof(ICreationTime.CreatedTime)).CurrentValue;
                        }
                        else
                        {
                            entity.Property(nameof(ICreationTime.CreatedTime)).IsModified = false;
                        }
                    }
                    if (entity.Entity is IUpdateTime updatetimeentity)
                    {
                        updatetimeentity.UpdatedTime = DateTime.Now;
                    }
                    break;
                }
            }
            base.SavingChangesEvent(sender, e);
        }
Пример #6
0
 private void HelloWordDBContext_SavingChanges(object sender, SavingChangesEventArgs e)
 {
     Console.WriteLine("SavingChanges");
 }
 private void OnSavingChanges(object sender, SavingChangesEventArgs e)
 {
     _cleanString();
     ConfigureEntityDates();
 }
Пример #8
0
 private void UniversityContext_SavingChanges(object sender, SavingChangesEventArgs e)
 {
     Console.WriteLine($"Saving Changes at {DateTime.Now}");
 }