我正在尝试在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没有结果吗?我把这段代码放在错误的地方吗?
答案 0 :(得分:0)
取自您发布的link:
“我们必须在ObjectContext上使用ObjectStateManager。”
因此,entities
应该是ObjectContext
的实现。
要将DbContext
转换为ObjectContext
,请使用:
var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
要使用条目:
var entires = objectContext.ObjectStateManager
.GetObjectStateEntries(EntityState.Unchanged);
有关ObjectContext
及其与DbContext
的关系的更多信息: