Example #1
0
        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);
            }
        }
Example #2
0
    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);
            }
        }
    }
Example #3
0
    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);
            }
        }
    }