实体框架实体处于修改状态(并推送更新)虽然影响相同的值?

时间:2010-12-23 14:24:39

标签: entity-framework

我将用一个例子来解释:

//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();

似乎无论您为实体属性设置相同的值,状态都会更改为已修改,并且更新会推送到数据库。我对这种行为感到惊讶......

新芬'

1 个答案:

答案 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方法更改实体的状态,无论值是什么。