public async Task DynamicReferenceTest() { var domain = await LoadDynamicDomain(); dynamic lib = null; dynamic loan = null; using (var session = domain.Store.BeginSession()) { lib = new DynamicModelEntity(domain, "Library"); lib.Name = "Library"; var book = new DynamicModelEntity(domain, "Book"); lib.Books.Add(book); loan = new DynamicModelEntity(domain, "Loan"); loan.Book = book; session.AcceptChanges(); } Assert.NotNull(lib); Assert.NotNull(loan.Book); Assert.NotNull(((IEnumerable <IModelElement>)lib.Books).FirstOrDefault()); }
public async Task AddInTransaction() { var store = await StoreBuilder.New().CreateAsync(); var schema = await store.Schemas.New <TestDomainDefinition>().CreateAsync(); var domain = await store.DomainModels.New().CreateAsync("Test"); domain.Indexes.CreateIndex(schema.Definition.XExtendsBaseClass, "index1", true, "Name"); var index = domain.Indexes.GetIndex("index1"); using (var s = domain.Store.BeginSession()) { dynamic a = new DynamicModelEntity(domain, schema.Definition.XExtendsBaseClass); a.Name = "momo"; s.AcceptChanges(); // Est visible dans la transaction Assert.NotNull(domain.GetElement(index.Get("momo"))); } using (var session = domain.Store.BeginSession(new SessionConfiguration { Readonly = true })) { Assert.NotNull(domain.GetElement(index.Get("momo"))); } }
internal DynamicPropertyDescriptor(DynamicModelEntity owner, ISchemaProperty property) : base(property.Name, null) { DebugContract.Requires(owner); DebugContract.Requires(property); _element = owner; _property = property; }
public async Task SerializableTransactionTest() { var store = await StoreBuilder.New().CreateAsync(); var schema = await store.Schemas.New <TestDomainDefinition>().CreateAsync(); var domain = await store.DomainModels.New().CreateAsync("Test"); Identity aid; dynamic a; using (var s = store.BeginSession(new SessionConfiguration { IsolationLevel = SessionIsolationLevel.ReadCommitted })) { a = new DynamicModelEntity(domain, schema.Definition.XExtendsBaseClass); aid = a.Id; a.Value = 10; s.AcceptChanges(); } var factory = new TaskFactory(); var signal = new System.Threading.ManualResetEventSlim(); var signal2 = new System.Threading.ManualResetEventSlim(); var t1 = factory.StartNew(() => { using (var s = store.BeginSession(new SessionConfiguration { IsolationLevel = SessionIsolationLevel.Serializable })) { // Accès sur A pour ouvrir une transaction Serializable (la session ne fait rien). Ce n'est que qu'en on // accède à la donnée que la transaction est crèèe var x = a.Value; // Ou n'importe quoi signal2.Set(); signal.Wait(); Assert.Equal(a.Value, 10); // On ne "voit" pas les modifications des autres transactions } }); Sleep(50); var t2 = factory.StartNew(() => { signal2.Wait(); using (var s = store.BeginSession(new SessionConfiguration { IsolationLevel = SessionIsolationLevel.ReadCommitted })) { a.Value = 11; s.AcceptChanges(); } signal.Set(); }); Task.WaitAll(t1, t2); }
public async Task ReadPhantomTest() { var store = await StoreBuilder.New().CreateAsync(); var schema = await store.Schemas.New <TestDomainDefinition>().CreateAsync(); var domain = await store.DomainModels.New().CreateAsync("Test"); Identity aid; dynamic a; // Création d'une valeur using (var s = store.BeginSession(new SessionConfiguration { IsolationLevel = SessionIsolationLevel.ReadCommitted })) { a = new DynamicModelEntity(domain, schema.Definition.XExtendsBaseClass); aid = a.Id; a.Value = 10; s.AcceptChanges(); } var factory = new TaskFactory(); var signal = new System.Threading.ManualResetEventSlim(); var signal2 = new System.Threading.ManualResetEventSlim(); var t1 = factory.StartNew(() => { // Cette transaction démarre avant l'autre mais elle va pouvoir 'voir' ses modifs commités using (var s = store.BeginSession(new SessionConfiguration { IsolationLevel = SessionIsolationLevel.ReadCommitted })) { signal2.Set(); signal.Wait(); // On attend le commit de l'autre Assert.Equal(11, a.Value); // On "voit" dèja que la valeur a été modifiée } }); Sleep(50); var t2 = factory.StartNew(() => { signal2.Wait(); // On s'assure de démarrer aprés l'autre transaction using (var s = store.BeginSession(new SessionConfiguration { IsolationLevel = SessionIsolationLevel.ReadCommitted })) { a.Value = 11; s.AcceptChanges(); } signal.Set(); }); Task.WaitAll(t1, t2); }
public async Task CreateDynamicElementTest() { var domain = await LoadDynamicDomain(); dynamic x = null; using (var session = domain.Store.BeginSession()) { x = new DynamicModelEntity(domain, "Library"); session.AcceptChanges(); } Assert.NotNull(x); }
public async Task DynamicPropertyTest() { var domain = await LoadDynamicDomain(); dynamic x = null; using (var session = domain.Store.BeginSession()) { x = new DynamicModelEntity(domain, "Library"); x.Name = "Library"; session.AcceptChanges(); } Assert.NotNull(x); Assert.Equal("Library", x.Name); }
public async Task IndexTest() { var store = await StoreBuilder.New().CreateAsync(); var schema = await store.Schemas.New <TestDomainDefinition>().CreateAsync(); var domain = await store.DomainModels.New().CreateAsync("Test"); domain.Indexes.CreateIndex(schema.Definition.XExtendsBaseClass, "index1", true, "Name"); using (var tx = domain.Store.BeginSession()) { dynamic a = new DynamicModelEntity(domain, schema.Definition.XExtendsBaseClass); a.Name = "toto"; tx.AcceptChanges(); } }
public async Task RemoveIndexElement() { var store = await StoreBuilder.New().CreateAsync(); var schema = await store.Schemas.New <TestDomainDefinition>().CreateAsync(); var domain = await store.DomainModels.New().CreateAsync("Test"); domain.Indexes.CreateIndex(schema.Definition.XExtendsBaseClass, "index1", true, "Name"); domain.Indexes.CreateIndex(schema.Definition.XExtendsBaseClass, "index2", true, "Value"); var index1 = domain.Indexes.GetIndex("index1"); var index2 = domain.Indexes.GetIndex("index2"); using (var s = domain.Store.BeginSession()) { dynamic a = new DynamicModelEntity(domain, schema.Definition.XExtendsBaseClass); a.Name = "momo"; a.Value = 10; s.AcceptChanges(); } dynamic mel = domain.GetElement(index1.Get("momo")); Assert.NotNull(mel); mel = domain.GetElement(index2.Get(10)); Assert.NotNull(mel); using (var s = domain.Store.BeginSession()) { s.Execute(new RemoveEntityCommand(mel)); s.AcceptChanges(); // Ne doit plus être visible ds la transaction Assert.Null(domain.GetElement(index1.Get("momo"))); Assert.Null(domain.GetElement(index2.Get(10))); } using (var session = domain.Store.BeginSession(new SessionConfiguration { Readonly = true })) { Assert.Null(domain.GetElement(index1.Get("momo"))); Assert.Null(domain.GetElement(index2.Get(10))); } }
internal DynamicTypeDescriptor(DynamicModelEntity element) { DebugContract.Requires(element); _element = element; }