我使用Override Save Changes问题中的代码在我的应用程序中实现审核。添加实体时,一切都很棒。但是,当修改实体时,永远不会加载“CreatedOn”日期。
它始终为null,因此从数据库中删除了初始的“CreatedOn”日期。
我还尝试查看存储在实体中的OriginalValues集合,并为“ModifiedOn”日期填充,但不为“CreatedOn”日期填充。这两个字段都填充在数据库中......为什么一个字段会被EF加载而另一个字段不被加载?
public override int SaveChanges()
{
var changeSet = ChangeTracker.Entries<IAuditable>();
if (changeSet != null)
{
foreach (DbEntityEntry<IAuditable> entry in changeSet)
{
switch (entry.State)
{
case EntityState.Added:
entry.Entity.CreatedOn = DateTime.Now;
entry.Entity.ModifiedOn = DateTime.Now;
break;
case EntityState.Modified:
entry.Entity.ModifiedOn = DateTime.Now;
//entry.Entity.CreatedOn date always null here
break;
}
}
}
return base.SaveChanges();
}
答案 0 :(得分:2)
也许您正在使用MVC上下文?如果是,那可能只是因为您没有将您的实体属性CreatedOn和ModifiedOn放在页面的隐藏字段中。我遇到了这个问题,我用局部视图解决了这个问题。
/*My Partial View View/Shared/HiddenSystemValues.cshtml */
@model Models.IAuditable
@Html.HiddenFor(model => model.CreatedOn)
@Html.HiddenFor(model => model.ModifiedOn)
...
/*In All My Pages */
...
@Html.Partial("HiddenSystemValues")
...