【发布时间】:2018-04-10 01:50:46
【问题描述】:
使用以下代码使用 EF6 更新表中的记录,记录会更新,但 EntityState.Modified 不正确。
var result = dbContext.MyUsers.Find(8);
result.UserName = "Tony Baloney";
db.SaveChanges();
记录已按预期更新,但我已覆盖 SaveChanges 以检查是否添加或更新了记录,以便我可以根据需要添加创建日期或修改日期。
添加EntityState.Added 时为真,但使用上述代码更新时EntityState.Modified 不为真。
这是为什么?
我的 SaveChanges 覆盖代码是:
public override int SaveChanges()
{
ObjectContext context = ((IObjectContextAdapter)this).ObjectContext;
var objectStateEntries = context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified)
.Where(e => !e.IsRelationship && e.Entity != null && typeof(EntityBase).IsAssignableFrom(e.Entity.GetType()))
.ToList();
var currentTime = DateTime.Now;
foreach (var entry in objectStateEntries)
{
var entityBase = entry.Entity as EntityBase;
if (entry.State == EntityState.Added)
{
entityBase.CreateDate = currentTime;
}
entityBase.UpdateDate = currentTime;
}
return base.SaveChanges();
}
【问题讨论】:
-
结果状态如何?
-
不确定我是否理解您的问题或知道如何确定。我假设根据上面我更改值 username 的行进行了修改
-
您可以检查它是否存在于 objectStateEntries 中。如果是,则进行修改。
-
objectStateEntries 中为 null。
标签: c# entity-framework entity-framework-6