如何使用Entity Framework 5实现审计跟踪?

时间:2014-01-06 11:42:38

标签: c# .net asp.net-mvc entity-framework-5

我正在尝试在Entity Framework 5中实现审计跟踪。

public class AuditZoneRepository : IAuditZoneRepository
    {
        private AISDbContext context = new AISDbContext();

        public int Save(AuditZone model, ModelStateDictionary modelState)
        {
            if (model.Id == 0)
            {
                context.AuditZones.Add(model);
            }
            else
            {
                var recordToUpdate = context.AuditZones.FirstOrDefault(x => x.Id == model.Id);
                if (recordToUpdate != null)
                {
                    recordToUpdate.Description = model.Description;
                    recordToUpdate.Valid = model.Valid;
                    recordToUpdate.ModifiedDate = DateTime.Now;
                }
            }

            try
            {
                context.SaveChanges();
                return 1;
            }
            catch (Exception ex)
            {
                modelState.AddModelError("", "Database error has occured.  Please try again later");
                return -1;
            }
        }
    }

为此,我需要ObjectStateEntry的{​​{1}}:

entity

如图所示here

当我尝试将其添加到保存功能时,它表示未知。在我的案例中,实体价值是多少?

借助Georges帮助我更新了我的保存代码,如下所示,

entities.ObjectStateManager.GetObjectStateEntry(changedEntity);

但是当我调试它时,modifiedProperties没有结果吗?我把这段代码放在错误的地方吗?

1 个答案:

答案 0 :(得分:0)

取自您发布的link

  

“我们必须在ObjectContext上使用ObjectStateManager。”

因此,entities应该是ObjectContext的实现。

要将DbContext转换为ObjectContext,请使用:

var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;

要使用条目:

var entires = objectContext.ObjectStateManager
                           .GetObjectStateEntries(EntityState.Unchanged);

有关ObjectContext及其与DbContext的关系的更多信息: