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(); } }
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(); }