【问题标题】:Entity Framework 4.1 DbContext Override SaveChanges Property Not Loading实体框架 4.1 DbContext 覆盖 SaveChanges 属性未加载
【发布时间】:2011-08-03 14:14:40
【问题描述】:

我使用Override Save Changes 问题中的代码在我的应用程序中实现审计。添加实体后,一切都很好。但是,当修改实体时,永远不会加载“CreatedOn”日期。

它始终为空,因此最初的“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();
    }

【问题讨论】:

  • 您找到解决方案了吗?今天我遇到了几乎和你一样的问题,只是在我的情况下,UpdatedBy/UpdatedById 为空。有趣的是,UpdatedOn 工作得很好,即使当我检查 SSMS 中的行时,UpdatedOnUpdatedById 都不是 NULL。我想知道审计字段是否以某种方式相互冲突,前提是它们都指向同一个实体......
  • 我从来没有找到解决方案 - 我最终在保存之前从数据库中重新加载了创建的日期。进行额外的数据库调用并不理想,但它可以工作。
  • 昨晚我一直在研究这个,发现是 DBSet.Remove(entity) 将我的属性设置为空(这甚至在调用 SaveChanges() 之前)。这显然是by design,这很遗憾,因为我最终不得不将逻辑上移一层到我的存储库中。我宁愿在 DbContext 中实现软删除,因为它更干燥。无论如何感谢您的更新!

标签: ef-code-first


【解决方案1】:

也许您在 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")
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多