public void ValueConflictThrows() { var entity = new TestEntity { Property = "prop" }; using (var context = InMemoryContextBuilder.Build <TestDataContext>()) { context.Add(entity); context.SaveChanges(); } using (var context = InMemoryContextBuilder.Build <TestDataContext>()) { var update = new TestEntity { Id = entity.Id, Property = "Something new", Timestamp = RowVersion.New() }; context.Attach(update); context.Entry(update).Property("Property").IsModified = true; var exception = Assert.Throws <DbUpdateConcurrencyException>(() => context.SaveChanges()); Approvals.Verify(exception.Message); } }
void Validate(Func <object, byte[]> getter, Action <object, byte[]> setter, IProperty primaryKey, object primaryKeyValue, List <object> objects) { byte[] rowVersion; var first = objects.First(); var exceptionSuffix = $" Type: {first.GetType().FullName}. {primaryKey.Name}: {primaryKeyValue}."; //If seen var version = getter(first); if (seen.Any(x => ReferenceEquals(x, first))) { rowVersion = version; if (rowVersion == null) { throw new Exception($"Row version has been incorrectly set to null. {exceptionSuffix}"); } } //If not seen else { if (version != null) { throw new Exception($"The first save must have a null RowVersion. {exceptionSuffix}"); } rowVersion = RowVersion.New(); setter(first, rowVersion); seen.Add(first); } foreach (var o in objects.Skip(1)) { var bytes = getter(o); if (bytes != null && bytes.SequenceEqual(rowVersion)) { rowVersion = RowVersion.New(); setter(o, rowVersion); } } }
void Validate(Func <object, byte[]> getter, Action <object, byte[]> setter, List <object> objects) { byte[] rowVersion; var first = objects.First(); var version = getter(first); if (seen.Any(x => ReferenceEquals(x, first))) { rowVersion = version; if (rowVersion == null) { throw new Exception("Row version has been incorrectly set to null"); } } //If not seen else { if (version != null) { throw new Exception("The first save must have a null RowVersion"); } rowVersion = RowVersion.New(); setter(first, rowVersion); seen.Add(first); } foreach (var o in objects.Skip(1)) { var bytes = getter(o); if (bytes != null && bytes.SequenceEqual(rowVersion)) { rowVersion = RowVersion.New(); setter(o, rowVersion); } } }