我们对基于 EF 6.2.0 的 C# 应用程序使用 UnitOfWork 方法,并使用 SQL Server 2017 Express (14.0.1000) 数据库后端。我们OwnContext.cs继承自DbContext应该填充字段Id,ChangedDate并且ChangedUser自动地,这是我们数据库模型中每个实体的一部分:public partial class OwnContext : DbContext { public override int SaveChanges() { bool hasChanges = false; this.ChangeTracker.DetectChanges(); #region Fill Created, Changed foreach (var item in this.ChangeTracker.Entries() .Where(x => (x.State == EntityState.Added || x.State == EntityState.Modified || x.State == EntityState.Deleted))) { if (item.State == EntityState.Deleted) { hasChanges = true; } else { // Id PropertyInfo pI = item.Entity.GetType().GetProperty("Id"); if (pI != null) { Guid id = (Guid)pI.GetValue(item.Entity, null); if ((Guid)id == Guid.Empty) { id = Guid.NewGuid(); pI.SetValue(item.Entity, id); } }适用于完美运行的新记录,但不适用于修改后的记录。ChangedDate字段中的新日期时间值仅出现在上下文中,但不会写入数据库。如果我单步执行代码,我会看到item.StateisEntityState.Modified并且countChanges返回值为 1 并且item.Entity所有内容中的值似乎都是正确的。如果查询对象,新值是可见的,但数据库中的值不会改变,所以如果我处理我的上下文,旧值将重新出现。让人有些困惑的是,在用户界面中的字段的值更改测试它是在db改变了,但现场ChangedDate。为什么?
2 回答
阿波罗的战车
TA贡献1862条经验 获得超6个赞
此时,更改跟踪器接收到的实体对象上的属性更改与 DTO 无关。您需要改为通过DbEntityEntry.CurrentValues
属性应用更改。
item.CurrentValues["ChangedDate"] = DateTime.Now;
- 2 回答
- 0 关注
- 130 浏览
添加回答
举报
0/150
提交
取消