public void Test_change_tracking_key_sizes() { Fixture.ClearEntities(); using (var ctx = Fixture.CreateContext()) { var entity = new CharacterTestEntity { Character8 = "123456 ", Character6 = "12345 " }; ctx.CharacterTestEntities.Add(entity); ctx.SaveChanges(); var update = ctx.CharacterTestEntities.Single(x => x.Character8 == "123456"); update.Character6 = entity.Character6.TrimEnd(); Assert.Equal(1, ctx.SaveChanges()); var test = ctx.CharacterTestEntities.Single(x => x.Character6 == "12345 "); Assert.Equal("12345 ", test.Character6); } }
public void Test_change_tracking_key_sizes() { Fixture.ClearEntities(); using (var ctx = Fixture.CreateContext()) { var entity = new CharacterTestEntity { Character8 = "123456 ", Character6 = "12345 " }; ctx.CharacterTestEntities.Add(entity); ctx.SaveChanges(); // In memory, the properties are unchanged. Assert.Equal("12345 ", entity.Character6); // Trailing whitespace is ignored when querying. var fromLocal = ctx.CharacterTestEntities.Single(x => x.Character6 == "12345" && x.Character6 == "12345 "); // And since we queried the same context, we received the same object. Assert.Equal(entity, fromLocal); // Which means that the property actually still has trailing whitespace... Assert.Equal("12345 ", fromLocal.Character6); // No changes are detected/saved when trailing whitespace is added. entity.Character6 += " "; Assert.Equal(0, ctx.SaveChanges()); } using (var ctx = Fixture.CreateContext()) { // The query still ignores the trailing whitespace, // but the materialized object won't have any trailing whitespace. var fromDb = ctx.CharacterTestEntities.Single(x => x.Character6 == "12345 "); // BUG: Why isn't the local cache clean? This shouldn't have the trailing whitespace. Assert.Equal("12345 ", fromDb.Character6); } }