簡體   English   中英

獲得相同的更改跟蹤器的當前值和原始值已修改 state

[英]Getting same Current and Original value of change tracker modified state

下面是我調用 SetChanges 方法的覆蓋 saveChanges 方法

 public override int SaveChanges(bool acceptAllChangesOnSuccess)
        {
            SetChanges();
            OnBeforeSaving();
            return base.SaveChanges(acceptAllChangesOnSuccess);
        }

現在,有時代碼工作得很好,但在某些情況下,它為property.OriginalValue 和 property.CurrentValue 提供相同的修改值,所以我無法在我的代碼中找到問題所在

 private void SetChanges()
        {
            Guid SystemLogId = Guid.NewGuid();
            var currentDate = DateTime.Now;
            var entitiesTracker = ChangeTracker.Entries()
                .Where(p => p.State == EntityState.Modified || p.State == EntityState.Added).ToList();

            foreach (var entry in entitiesTracker)
            {
                var pagename = entry.Entity.GetType().Name;
                if (pagename != "ExceptionLog")
                {
                    var rowid = 0;
                    try
                    {
                        rowid = int.Parse(entry.OriginalValues["Id"].ToString());
                    }
                    catch (Exception)
                    { }

                    SystemLog sysLog = new SystemLog();
                   

                    List<SystemChangeLog> changeLog = new List<SystemChangeLog>();
                    foreach (PropertyEntry property in entry.Properties)
                    {
                        string propertyName = property.Metadata.Name;
                        switch (entry.State)
                        {
                            case EntityState.Added:
                                sysLog.Event = "Created";
                                break;

                            case EntityState.Modified:
                                {
                                    sysLog.Event = "Updated";
                                    if (propertyName != "ModifiedDate" && propertyName != "CreatedDate" && propertyName != "ModifiedBy" && propertyName != "CreatedBy" && propertyName != "RowVersion")
                                    {
                                        var original = Convert.ToString(property.OriginalValue);
                                        var current = Convert.ToString(property.CurrentValue);

                                        if (property.IsModified && !original.Equals(current))
                                        {
                                            SystemChangeLog log = new SystemChangeLog()
                                            {
                                                Property = propertyName,
                                                OldValue = original,
                                                NewValue = current,
                                                DateOfChange = currentDate,
                                                rowid = rowid,
                                                SystemLogId = SystemLogId.ToString(),
                                            };
                                            changeLog.Add(log);
                                        }
                                    }
                                }
                                break;
                        }          
                    }
                    base.Set<SystemChangeLog>().AddRange(changeLog);
                    if(changeLog.Count() >0 || entry.State == EntityState.Added)
                    {
                        sysLog.UserId = UserId;
                        sysLog.Date = currentDate;
                        sysLog.Page = pagename;
                        sysLog.Location = ExceptionHandler(entry, "Location");
                        sysLog.IPAddress = ExceptionHandler(entry, "IPAddress");
                        sysLog.MACAddress = ExceptionHandler(entry, "MACAddress");
                        sysLog.SystemLogId = SystemLogId.ToString();
                        base.Set<SystemLog>().Add(sysLog);
                    }  
                }
            }
        }

還有有什么辦法可以讓它快速進入超過一千個條目

希望下面的代碼可以幫助:

 public override int SaveChanges(bool acceptAllChangesOnSuccess)
{
     setChanges(); // to get new value and old value
     var result = base.SaveChanges(acceptAllChangesOnSuccess);
     OnAfterSaveChanges();// to get auto added id
     return result;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM