我们对基于 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。
为什么?
阿波罗的战车
相关分类