2014-01-06 25 views
0

我想实现的审计跟踪实体框架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; 
      } 
     } 
    } 

要做到这一点,我需要的ObjectStateEntryentity

entities.ObjectStateManager.GetObjectStateEntry(changedEntity); 

如图所示here

当我尝试将此添加到保存功能它说未知。我的情况是什么?

随着乔治的帮助,我更新了我的节省代码如下,

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; 


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

        var entires = objectContext.ObjectStateManager.GetObjectStateEntry(recordToUpdate); 

        IEnumerable<string> modifiedProperties = entires.GetModifiedProperties(); 
       } 
      } 

      try 
      { 




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

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

+0

什么是确切的错误信息?你能发布异常的堆栈跟踪吗? –

+0

没有错误消息..没有方法称为AuditZone.ObjectStateManager – user2206329

+0

对于审计,您还可以重写DbContext中的SaveChanges()以审计实体中的所有更改。看看:https://auditdbcontext.codeplex.com/ – lopezbertoni

回答

0

link两者你已经发布:

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

因此,entities应该是ObjectContext的执行。

要转换DbContextObjectContext使用:

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

要获得项目使用:

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

更多关于ObjectContext及其关系与DbContext

+0

乔治 - 谢谢你,我更新了我的代码,仍然有一个问题 – user2206329