我将用一个例子来解释:
//get an entity
var myEntity context.GetClient(543622);
// imagine this client has already a property myValue=10
// (retrieved from the database)
//set again this value
myEntity.myValue = 10;
// then we get the modified for this entity
ObjectStateEntry ose = null;
_context.ObjectStateManager.TryGetObjectStateEntry(myEntity.EntityKey, out ose);
// the ose.EntityState is modified
// and here count = 1 ??!!...
var count = ose.GetModifiedProperties().Count();
//at last a SaveChanges push a commit to the bdd
// (tracked with SQL Server Profiler).
_context.SaveChanges();
似乎无论您为实体属性设置相同的值,状态都会更改为已修改,并且更新会推送到数据库。我对这种行为感到惊讶......
新芬'
答案 0 :(得分:0)
这似乎是正常行为: http://msdn.microsoft.com/en-us/library/bb738695%28v=vs.90%29.aspx
每当调用属性setter时,对象的状态从Unchanged更改为Modified。即使设置的值与当前值相同,也会发生这种情况。
如果你看一下EF生成的实体属性的后面代码:
set
{
this.OnNomChanging(value);
this.ReportPropertyChanging("Nom");
this._Nom = global::System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value, false);
this.ReportPropertyChanged("Nom");
this.OnNomChanged();
}
ReportPropertyChanged方法更改实体的状态,无论值是什么。