2014-05-11 6 views
0

Dans le code suivant, je m'attends à ce que la valeur d'origine soit différente de la nouvelle valeur que j'ai définie. Pourquoi mon test échoue-t-il? J'utilise EF 6.1.0 La valeur d'origine est incorrectement définie sur la nouvelle valeur.Entity Framework Valeur d'origine non conforme

[TestMethod] 
public void CheckOriginalAndNew() 
{ 
    var dbContext = new ProjectContext(); 
    var proj = dbContext.Projects.Find(1); 
    proj.Description = Guid.NewGuid().ToString(); 
    DbSet<Project> dbSet = dbContext.Set<Project>(); 
    dbSet.Add(proj); 
    foreach (var entry in dbContext.ChangeTracker.Entries()) 
    { 
    entry.State = System.Data.Entity.EntityState.Modified; 
    } 
    ObjectContext objectContex = ((IObjectContextAdapter)dbContext).ObjectContext; 
    objectContex.DetectChanges(); 
    var entries = 
     objectContex.ObjectStateManager.GetObjectStateEntries(System.Data.Entity.EntityState.Modified); 

    foreach (ObjectStateEntry entry in entries.Where(e => e.Entity is LoggedEntity && !e.IsRelationship)) 
    { 
     for (int i = 0; i < entry.CurrentValues.FieldCount; i++) 
     { 
      string fieldName = entry.CurrentValues.DataRecordInfo.FieldMetadata[i].FieldType.Name; 
      int ordinal = entry.OriginalValues.GetOrdinal(fieldName); 

      if (fieldName == "Description") 
      { 
       object newValue = entry.CurrentValues[ordinal]; 
       object oldValue = entry.OriginalValues[ordinal]; 
       Assert.AreNotEqual(newValue, oldValue); // fails! Why? 
      } 
     } 
    } 
} 

Répondre

0

La raison pour laquelle la valeur d'origine correspond à la valeur actuelle est que l'entrée a été ajoutée au lieu d'être modifiée. Au lieu de

DbSet<Project> dbSet = dbContext.Set<Project>(); 
dbSet.Add(proj); 

Je l'ai utilisé

dbContext.Entry(proj).State = System.Data.Entity.EntityState.Modified;