Example #1
0
        public void Locks_Only_Modified_Tables_When_Different_datalyer()
        {
            using (var application = SequenceGeneratorModule().Application){
                var defaultDataLayer1  = NewSimpleDataLayer(application);
                var explicitUnitOfWork = new ExplicitUnitOfWork(defaultDataLayer1);
                var testObject         = new TestObject(explicitUnitOfWork);
                explicitUnitOfWork.FlushChanges();

                var defaultDataLayer2   = NewSimpleDataLayer(application);
                var explicitUnitOfWork1 = new ExplicitUnitOfWork(defaultDataLayer2);
                var testObject2         = new TestObject2(explicitUnitOfWork1);
                explicitUnitOfWork1.FlushChanges();

                Should.Throw <ShouldCompleteInException>(() => Should.CompleteIn(
                                                             () => explicitUnitOfWork.GetObjectByKey <TestObject2>(testObject2.Oid).ShouldNotBeNull(),
                                                             TimeSpan.FromSeconds(1)));
                Should.Throw <ShouldCompleteInException>(() => Should.CompleteIn(
                                                             () => explicitUnitOfWork1.GetObjectByKey <TestObject>(testObject.Oid).ShouldNotBeNull(),
                                                             TimeSpan.FromSeconds(1)));
                explicitUnitOfWork.Close();
                defaultDataLayer1.Dispose();
                explicitUnitOfWork1.Close();
                defaultDataLayer2.Dispose();
            }
        }
Example #2
0
        public async Task Generate_Sequences_When_Locks_From_ExplicitUow()
        {
            using var application = NewApplication();
            var simpleDataLayer = NewSimpleDataLayer(application);

            SequenceGeneratorModule(application);
            using (var objectSpace = application.CreateObjectSpace()){
                objectSpace.SetSequence <TestObject>(o => o.SequentialNumber, 10);
            }
            var testObjectObserver = SequenceGeneratorService.Sequence.OfType <TestObject>().SubscribeReplay();
            var explicitUnitOfWork = new ExplicitUnitOfWork(simpleDataLayer);

            new TestObject(explicitUnitOfWork);
            explicitUnitOfWork.FlushChanges();
            await TestObjects(application, false, 1)
            .Merge(Unit.Default.ReturnObservable().Delay(TimeSpan.FromMilliseconds(300))
                   .Do(_ => explicitUnitOfWork.CommitChanges())).FirstAsync();

            explicitUnitOfWork.Close();
            simpleDataLayer.Dispose();

            var firstAsync = await testObjectObserver.FirstAsync();

            firstAsync.SequentialNumber.ShouldBe(10);
        }
        public void Throws_if_another_connection_exists_with_same_DataLayer()
        {
            using var application      = SequenceGeneratorModule().Application;
            using var defaultDataLayer = NewSimpleDataLayer(application);
            var explicitUnitOfWork = new ExplicitUnitOfWork(defaultDataLayer);
            var testObject         = new TestObject(explicitUnitOfWork);

            explicitUnitOfWork.FlushChanges();
            explicitUnitOfWork.GetObjectByKey <TestObject>(testObject.Oid).ShouldNotBeNull();

            var explicitUnitOfWork1 = new ExplicitUnitOfWork(defaultDataLayer);


            new TestObject2(explicitUnitOfWork1);

            Should.Throw <InvalidOperationException>(() => explicitUnitOfWork1.FlushChanges(), SequenceGeneratorService.ParallelTransactionExceptionMessage);

            explicitUnitOfWork.Close();
            explicitUnitOfWork1.Close();
        }
        public async Task UnLocks_current_Record_When_Commit_Changes()
        {
            using var application = SequenceGeneratorModule().Application;
            var defaultDataLayer1 = await application.ObjectSpaceProvider.SequenceGeneratorDatalayer();

            var explicitUnitOfWork = new ExplicitUnitOfWork(defaultDataLayer1);

            explicitUnitOfWork.SetSequence <TestObject>(o => o.SequentialNumber);
            explicitUnitOfWork.FlushChanges();

            var defaultDataLayer2   = NewSimpleDataLayer(application);
            var explicitUnitOfWork1 = new ExplicitUnitOfWork(defaultDataLayer2);

            explicitUnitOfWork.CommitChanges();
            explicitUnitOfWork1.GetSequenceStorage(typeof(TestObject));

            explicitUnitOfWork.Close();
            defaultDataLayer1.Dispose();
            explicitUnitOfWork1.Close();
            defaultDataLayer2.Dispose();
        }