Exemplo n.º 1
0
        public void NodeUpdate(ChangeTrackerBase tracker)
        {
            Assert.Empty(tracker.GetChangeLog());

            Book book  = new Book();
            Book book2 = new Book()
            {
                EntityId = 1
            };
            Book book3 = new Book();

            tracker.Track(new EntityChangeNodeCreation(book));
            tracker.Track(new EntityChangeNodeUpdate(book2, typeof(Book).GetProperty(nameof(Book.Name)), book2.Name, book2.Name = "pippo"));
            Assert.Equal(2, tracker.GetChangeLog().Count());
            tracker.Track(new EntityChangeNodeUpdate(book2, typeof(Book).GetProperty(nameof(Book.Name)), book2.Name, null));
            Assert.Equal(2, tracker.GetChangeLog().Count());

            tracker.Track(new EntityChangeNodeUpdate(book, typeof(Book).GetProperty(nameof(Book.Name)), book.Name, book.Name = "pippo"));
            Assert.Equal(2, tracker.GetChangeLog().Count());
            tracker.Track(new EntityChangeNodeUpdate(book2, typeof(Book).GetProperty(nameof(Book.Name)), book2.Name, book2.Name = "pippox"));
            Assert.Equal(2, tracker.GetChangeLog().Count());
            tracker.Track(new EntityChangeNodeUpdate(book2, typeof(Book).GetProperty(nameof(Book.Name)), book2.Name, book2.Name = "luca"));
            Assert.Equal(2, tracker.GetChangeLog().Count());
            Assert.Equal(1, tracker.GetChangeLog().Where(p => p.Entity == book2 && (p as EntityChangeNodeUpdate)?.CurrentValue == "luca").Count());
            Assert.Equal(0, tracker.GetChangeLog().Where(p => p.Entity == book2 && (p as EntityChangeNodeUpdate)?.CurrentValue == "pippox").Count());

            tracker.Track(new EntityChangeNodeUpdate(book2, typeof(Book).GetProperty(nameof(Book.Index)), book2.Index, book2.Index = 3));
            Assert.Equal(3, tracker.GetChangeLog().Count());

            Assert.Throws <ArgumentException>(() => tracker.Track(new EntityChangeNodeUpdate(book, typeof(Book).GetProperty(nameof(Book.Name)), book.Index, "pippo")));
            Assert.Throws <InvalidOperationException>(() => tracker.Track(new EntityChangeNodeUpdate(book3, typeof(Book).GetProperty(nameof(Book.Name)), book.Name, book.Name = "pippo")));
        }
Exemplo n.º 2
0
        public GraphContext(DriverProvider provider, TypesManager typesManager, ChangeTrackerBase changeTracker, EntityManagerBase entityManager)
            : base(typesManager, changeTracker, entityManager)
        {
            Driver = new ManagedDriver(provider.GetDriver(), provider.Manager, this);

            OnModelCreating(new GraphModelBuilder(typesManager));

            Runner = Driver.Session();
        }
Exemplo n.º 3
0
        public void RelUpdate(ChangeTrackerBase tracker)
        {
            Assert.Empty(tracker.GetChangeLog());

            Book book  = new Book();
            Book book2 = new Book();
            Book book3 = new Book()
            {
                EntityId = 1
            };
            Book       book4 = new Book();
            Connection rel   = new Connection();
            Connection rel2  = new Connection()
            {
                EntityId = 1
            };
            Connection rel3 = new Connection();

            tracker.Track(new EntityChangeNodeCreation(book));
            tracker.Track(new EntityChangeNodeCreation(book2));

            tracker.Track(new EntityChangeRelCreation(rel, book, book3));
            tracker.Track(new EntityChangeRelUpdate(rel2, typeof(Connection).GetProperty(nameof(Connection.SourcePropertyName)), rel2.SourcePropertyName, rel2.SourcePropertyName = "pippo"));
            Assert.Equal(4, tracker.GetChangeLog().Count());

            tracker.Track(new EntityChangeRelUpdate(rel2, typeof(Connection).GetProperty(nameof(Connection.SourcePropertyName)), rel2.SourcePropertyName, null));
            Assert.Equal(4, tracker.GetChangeLog().Count());

            tracker.Track(new EntityChangeRelUpdate(rel, typeof(Connection).GetProperty(nameof(Connection.SourcePropertyName)), rel.SourcePropertyName, rel.SourcePropertyName = "pippo"));
            Assert.Equal(4, tracker.GetChangeLog().Count());
            tracker.Track(new EntityChangeRelUpdate(rel2, typeof(Connection).GetProperty(nameof(Connection.SourcePropertyName)), rel2.SourcePropertyName, rel2.SourcePropertyName = "pippox"));
            Assert.Equal(4, tracker.GetChangeLog().Count());
            tracker.Track(new EntityChangeRelUpdate(rel2, typeof(Connection).GetProperty(nameof(Connection.SourcePropertyName)), rel2.SourcePropertyName, rel2.SourcePropertyName = "luca"));
            Assert.Equal(4, tracker.GetChangeLog().Count());
            Assert.Equal(1, tracker.GetChangeLog().Where(p => p.Entity == rel2 && (p as EntityChangeRelUpdate)?.CurrentValue == "luca").Count());
            Assert.Equal(0, tracker.GetChangeLog().Where(p => p.Entity == rel2 && (p as EntityChangeRelUpdate)?.CurrentValue == "pippox").Count());

            tracker.Track(new EntityChangeRelUpdate(rel2, typeof(Connection).GetProperty(nameof(Connection.Version)), rel2.Version, rel2.Version = 1));
            Assert.Equal(5, tracker.GetChangeLog().Count());

            Assert.Throws <ArgumentException>(() => tracker.Track(new EntityChangeRelUpdate(rel, typeof(Connection).GetProperty(nameof(Connection.Version)), rel.Version, "pippo")));
            Assert.Throws <InvalidOperationException>(() => tracker.Track(new EntityChangeRelUpdate(rel3, typeof(Connection).GetProperty(nameof(Connection.Version)), rel.Version, rel.Version = 1)));
        }
Exemplo n.º 4
0
        public void RelCreation(ChangeTrackerBase tracker)
        {
            Assert.Empty(tracker.GetChangeLog());

            Book book  = new Book();
            Book book2 = new Book();
            Book book3 = new Book()
            {
                EntityId = 1
            };
            Book book4 = new Book();
            Book book5 = new Book()
            {
                EntityId = 2
            };
            Connection rel  = new Connection();
            Connection rel2 = new Connection()
            {
                EntityId = 1
            };
            Connection rel3 = new Connection();

            tracker.Track(new EntityChangeNodeCreation(book));
            tracker.Track(new EntityChangeNodeCreation(book2));
            tracker.Track(new EntityChangeNodeDeletion(book5));
            Assert.Equal(3, tracker.GetChangeLog().Count());

            tracker.Track(new EntityChangeRelCreation(rel, book, book3));
            Assert.Equal(4, tracker.GetChangeLog().Count());
            tracker.Track(new EntityChangeRelCreation(rel, book, book3));
            Assert.Equal(4, tracker.GetChangeLog().Count());
            tracker.Track(new EntityChangeRelUpdate(rel2, typeof(Connection).GetProperty(nameof(Connection.SourcePropertyName)), rel2.SourcePropertyName, rel2.SourcePropertyName = "pippo"));
            Assert.Equal(5, tracker.GetChangeLog().Count());

            Assert.Throws <ArgumentException>(() => tracker.Track(new EntityChangeRelCreation(rel3, book4, book3)));
            Assert.Throws <ArgumentException>(() => tracker.Track(new EntityChangeRelCreation(rel3, book, book4)));

            Assert.Throws <InvalidOperationException>(() => tracker.Track(new EntityChangeRelCreation(rel2, book, book3)));

            Assert.Throws <InvalidOperationException>(() => tracker.Track(new EntityChangeRelCreation(rel, book, book2)));

            Assert.Throws <ArgumentException>(() => tracker.Track(new EntityChangeRelCreation(rel3, book5, book3)));
        }
Exemplo n.º 5
0
        public void RelDeletion(ChangeTrackerBase tracker)
        {
            Assert.Empty(tracker.GetChangeLog());

            Book book  = new Book();
            Book book2 = new Book();
            Book book3 = new Book()
            {
                EntityId = 1
            };
            Book       book4 = new Book();
            Connection rel   = new Connection();
            Connection rel2  = new Connection()
            {
                EntityId = 1
            };
            Connection rel3 = new Connection();

            tracker.Track(new EntityChangeNodeCreation(book));
            tracker.Track(new EntityChangeNodeCreation(book2));
            Assert.Equal(2, tracker.GetChangeLog().Count());

            tracker.Track(new EntityChangeRelCreation(rel, book, book3));
            tracker.Track(new EntityChangeRelUpdate(rel2, typeof(Connection).GetProperty(nameof(Connection.SourcePropertyName)), rel2.SourcePropertyName, rel2.SourcePropertyName = "pippo"));
            Assert.Equal(4, tracker.GetChangeLog().Count());

            tracker.Track(new EntityChangeRelDeletion(rel2));
            Assert.Equal(4, tracker.GetChangeLog().Count());
            Assert.Equal(1, tracker.GetChangeLog().Where(p => p is EntityChangeRelDeletion).Count());

            tracker.Track(new EntityChangeRelDeletion(rel));
            Assert.Equal(3, tracker.GetChangeLog().Count());

            tracker.Track(new EntityChangeRelDeletion(rel3));
            Assert.Equal(3, tracker.GetChangeLog().Count());

            tracker.Track(new EntityChangeRelCreation(rel3, book, book3));
            Assert.Equal(4, tracker.GetChangeLog().Count());
            tracker.Track(new EntityChangeNodeDeletion(book));
            Assert.Equal(2, tracker.GetChangeLog().Count());
        }
Exemplo n.º 6
0
        internal GraphContextBase(TypesManager typesManager, ChangeTrackerBase changeTracker, EntityManagerBase entityManager)
        {
            TypesManager  = typesManager ?? throw new ArgumentNullException(nameof(typesManager));
            ChangeTracker = changeTracker ?? throw new ArgumentNullException(nameof(changeTracker));
            EntityManager = entityManager ?? throw new ArgumentNullException(nameof(entityManager));

            Interceptors = new List <IInterceptor>();
            Interceptors.Add(new OgmCoreProxyPrimitiveInterceptor(this));
            Interceptors.Add(new OgmCoreProxyEntityInterceptor(this));
            Interceptors.Add(new OgmCoreProxyEntityCollectionSetterInterceptor(this));
            Interceptors.Add(new OgmCoreProxyEntityCollectionGetterInterceptor(this));

            ProxyGenerationOptions options = new ProxyGenerationOptions()
            {
                Selector = new OgmCoreProxyInterceptorSelector(this)
            };

            options.AddMixinInstance(new Dictionary <string, object>());
            ProxyGenerator = new ProxyGenerator();

            ObjectWalker = new ObjectGraphWalker(ProxyGenerator, options, typesManager, changeTracker, Interceptors);
        }
Exemplo n.º 7
0
        public void RelMerge(ChangeTrackerBase tracker)
        {
            Assert.Empty(tracker.GetChangeLog());

            Book book  = new Book();
            Book book2 = new Book();
            Book book3 = new Book()
            {
                EntityId = 1
            };
            Book book4 = new Book();
            Book book5 = new Book()
            {
                EntityId = 2
            };
            Connection rel  = new Connection();
            Connection rel2 = new Connection()
            {
                EntityId = 1
            };
            Connection rel3 = new Connection();

            tracker.Track(new EntityChangeNodeCreation(book));
            tracker.Track(new EntityChangeNodeCreation(book2));
            tracker.Track(new EntityChangeNodeDeletion(book5));
            Assert.Equal(3, tracker.GetChangeLog().Count());

            tracker.Track(new EntityChangeConnectionMerge(rel, book, book3, 0));
            Assert.Equal(4, tracker.GetChangeLog().Count());
            tracker.Track(new EntityChangeConnectionMerge(rel, book, book3, 1));
            Assert.Equal(4, tracker.GetChangeLog().Count());
            tracker.Track(new EntityChangeRelUpdate(rel, typeof(Connection).GetProperty(nameof(Connection.SourcePropertyName)), rel2.SourcePropertyName, rel2.SourcePropertyName = "pippo"));
            Assert.Equal(4, tracker.GetChangeLog().Count());

            tracker.Track(new EntityChangeConnectionMerge(rel, book, book2, 0));
            Assert.Equal(4, tracker.GetChangeLog().Count());
        }
Exemplo n.º 8
0
        public void NodeDeletion(ChangeTrackerBase tracker)
        {
            Assert.Empty(tracker.GetChangeLog());

            Book book  = new Book();
            Book book2 = new Book()
            {
                EntityId = 1
            };
            Book book3 = new Book();

            tracker.Track(new EntityChangeNodeCreation(book));
            tracker.Track(new EntityChangeNodeUpdate(book2, typeof(Book).GetProperty(nameof(Book.Name)), book2.Name, book2.Name = "pippo"));
            Assert.Equal(2, tracker.GetChangeLog().Count());

            tracker.Track(new EntityChangeNodeDeletion(book2));
            Assert.Equal(2, tracker.GetChangeLog().Count());
            Assert.Equal(1, tracker.GetChangeLog().Where(p => p is EntityChangeNodeDeletion).Count());

            tracker.Track(new EntityChangeNodeDeletion(book));
            Assert.Equal(1, tracker.GetChangeLog().Count());

            Assert.Throws <InvalidOperationException>(() => tracker.Track(new EntityChangeNodeDeletion(book3)));
        }
Exemplo n.º 9
0
        public void NodeCreation(ChangeTrackerBase tracker)
        {
            Assert.Empty(tracker.GetChangeLog());

            Book book  = new Book();
            Book book2 = new Book();
            Book book3 = new Book()
            {
                EntityId = 1
            };

            tracker.Track(new EntityChangeNodeCreation(book));
            Assert.Equal(1, tracker.GetChangeLog().Count());
            tracker.Track(new EntityChangeNodeCreation(book));
            Assert.Equal(1, tracker.GetChangeLog().Count());
            tracker.Track(new EntityChangeNodeCreation(book2));
            Assert.Equal(2, tracker.GetChangeLog().Count());

            tracker.Track(new EntityChangeNodeDeletion(book3));
            Assert.Equal(3, tracker.GetChangeLog().Count());

            Assert.Throws <InvalidOperationException>(() => tracker.Track(new EntityChangeNodeCreation(book3)));
            Assert.Equal(3, tracker.GetChangeLog().Count());
        }
Exemplo n.º 10
0
 public GraphContextBase(IStatementRunner runner, TypesManager typesManager, ChangeTrackerBase changeTracker, EntityManagerBase entityManager)
     : this(typesManager, changeTracker, entityManager)
 {
     Runner = runner ?? throw new ArgumentNullException(nameof(runner));
 }
Exemplo n.º 11
0
 public TransactionGraphContext(ITransaction runner, TypesManager typesManager, ChangeTrackerBase changeTracker, EntityManagerBase entityManager)
     : base(runner, typesManager, changeTracker, entityManager)
 {
 }
Exemplo n.º 12
0
 public GlobalTestContext(DriverProvider <GlobalTestContext> provider, TypesManager typesManager, ChangeTrackerBase changeTracker, EntityManagerBase entityManager)
     : base(provider, typesManager, changeTracker, entityManager)
 {
 }
Exemplo n.º 13
0
 public MockContext(DriverProvider provider, TypesManager typesManager, ChangeTrackerBase changeTracker, EntityManagerBase entityManager)
     : base(provider, typesManager, changeTracker, entityManager)
 {
 }
Exemplo n.º 14
0
        public ObjectGraphWalker(ProxyGenerator proxyGenerator, ProxyGenerationOptions proxyGenerationOptions, TypesManager typesManager, ChangeTrackerBase changeTracker, IEnumerable <IInterceptor> interceptors)
        {
            ProxyGenerator         = proxyGenerator ?? throw new ArgumentNullException(nameof(proxyGenerator));
            ProxyGenerationOptions = proxyGenerationOptions ?? throw new ArgumentNullException(nameof(proxyGenerationOptions));
            TypesManager           = typesManager ?? throw new ArgumentNullException(nameof(typesManager));
            ChangeTracker          = changeTracker ?? throw new ArgumentNullException(nameof(changeTracker));

            Interceptors = interceptors?.ToList() ?? throw new ArgumentNullException(nameof(interceptors));
        }