alp*_*pav 6 entity-framework updates entity-framework-4
如果我加载实体对象,然后将其中一个属性分配给之前的相同值,框架是否检测到更改,或者它会将IsModified标志设置为true?
这是字段名称的生成代码如下所示:
OnNameChanging(value);
ReportPropertyChanging("Name");
_Name = StructuralObject.SetValidValue(value);
ReportPropertyChanged("Name");
OnNameChanged();
Run Code Online (Sandbox Code Playgroud)
我不知道哪些事件为该字段和整个实体设置了IsModified标志.
现在看来情况有所不同(EF6)。我正在研究这个问题,看看在设置属性值时是否需要使用 if 语句来查看“新值”是否不同。我使用以下内容进行了测试,实体未标记为已修改:
var things = dbContext.Things.AsQueryable();
var thing = things.First();
string name = thing.Name;
thing.Name = name;
var entry = dbContext.Entry(thing);
var state = entry.State;
int count = dbContext.ChangeTracker.Entries().Count(e => e.State == EntityState.Modified);
var modified = entry.Property(x => x.Name).IsModified;
Run Code Online (Sandbox Code Playgroud)
针对 EF6 证明这一点的链接。
用于证明 EF Core 这一点的链接。
您的上下文仅跟踪数据是否被修改,而不是数据不同时。
您可以像这样进行检查:
private void CheckIfDifferent(DbEntityEntry entry)
{
if (entry.State != EntityState.Modified)
return;
if (entry.OriginalValues.PropertyNames.Any(propertyName => !entry.OriginalValues[propertyName].Equals(entry.CurrentValues[propertyName])))
return;
(this.dbContext as IObjectContextAdapter).ObjectContext.ObjectStateManager.GetObjectStateEntry(entry.Entity).ChangeState(EntityState.Unchanged);
}
Run Code Online (Sandbox Code Playgroud)
来源:https ://stackoverflow.com/a/13515869/1339087
| 归档时间: |
|
| 查看次数: |
1839 次 |
| 最近记录: |