实体框架原始价值与预期不符

时间:2014-05-11 10:06:59

标签: entity-framework

在下面的代码中,我希望原始值与我设置的新值不同。 为什么我的测试失败了?我使用的是EF 6.1.0 原始值被错误地设置为新值。

 [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?
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

原始值与当前值匹配的原因是该条目已添加而不是已修改。 而不是

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

我应该用

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