我想实现的审计跟踪实体框架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
为entity
:
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中有没有结果?我把这段代码放在错误的地方?
什么是确切的错误信息?你能发布异常的堆栈跟踪吗? –
没有错误消息..没有方法称为AuditZone.ObjectStateManager – user2206329
对于审计,您还可以重写DbContext中的SaveChanges()以审计实体中的所有更改。看看:https://auditdbcontext.codeplex.com/ – lopezbertoni