实体框架4.1 DbContext覆盖SaveChanges属性未加载

时间:2011-08-03 14:14:40

标签: ef-code-first

我使用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();
    }

1 个答案:

答案 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")
...