public void CanUseEvict() { using (var store = GetDocumentStore()) { using (var session = store.OpenSession()) { var user = new User { Id = "users/1", Name = "John" }; session.Store(user); session.SaveChanges(); } using (var session = store.OpenSession()) { Assert.Equal(0, session.Advanced.NumberOfRequests); session.Load<User>("users/1"); Assert.Equal(1, session.Advanced.NumberOfRequests); var user = session.Load<User>("users/1"); Assert.Equal(1, session.Advanced.NumberOfRequests); session.Advanced.Evict(user); session.Load<User>("users/1"); Assert.Equal(2, session.Advanced.NumberOfRequests); } } }
public async Task KeyGeneration() { using (var store = GetDocumentStore()) { store.Conventions.RegisterIdConvention<User>((databaseName, commands, entity) => "abc"); store.Conventions.RegisterAsyncIdConvention<User>((databaseName, commands, entity) => new CompletedTask<string>("def")); using (var session = store.OpenSession()) { var user = new User { Name = "John" }; session.Store(user); Assert.Equal("abc", user.Id); } using (var session = store.OpenAsyncSession()) { var user = new User { Name = "John" }; await session.StoreAsync(user); Assert.Equal("def", user.Id); } Assert.Equal("abc", store.Conventions.GenerateDocumentKey(store.DefaultDatabase, store.DatabaseCommands, new User())); Assert.Equal("def", await store.Conventions.GenerateDocumentKeyAsync(store.DefaultDatabase, store.AsyncDatabaseCommands, new User())); Assert.Equal("addresses/1", store.Conventions.GenerateDocumentKey(store.DefaultDatabase, store.DatabaseCommands, new Address())); Assert.Equal("companies/1", await store.Conventions.GenerateDocumentKeyAsync(store.DefaultDatabase, store.AsyncDatabaseCommands, new Company())); } }
public void Changes() { using (var store = GetDocumentStore()) { using (var session = store.OpenSession()) { Assert.False(session.Advanced.HasChanges); var user = new User { Id = "users/1", Name = "John" }; session.Store(user); Assert.True(session.Advanced.HasChanged(user)); Assert.True(session.Advanced.HasChanges); session.SaveChanges(); Assert.False(session.Advanced.HasChanged(user)); Assert.False(session.Advanced.HasChanges); user.AddressId = "addresses/1"; Assert.True(session.Advanced.HasChanged(user)); Assert.True(session.Advanced.HasChanges); session.Advanced.Clear(); Assert.False(session.Advanced.HasChanges); var user2 = new User { Id = "users/2", Name = "John" }; session.Store(user2); session.Delete(user2); Assert.True(session.Advanced.HasChanged(user2)); Assert.True(session.Advanced.HasChanges); } } }
public async Task CanReplicateDocument() { using (var source = GetDocumentStore()) using (var destination = GetDocumentStore()) { SetupReplication(source, destinations: destination); using (var session = source.OpenAsyncSession()) { var user = new User {Name = "Arek"}; await session.StoreAsync(user); await session.SaveChangesAsync(); await source.Replication.WaitAsync(etag: session.Advanced.GetEtagFor(user)); } using (var session = destination.OpenAsyncSession()) { var user = await session.LoadAsync<User>("users/1"); Assert.NotNull(user); Assert.Equal("Arek", user.Name); } } }
public void BasicInclude() { using (var store = GetDocumentStore()) { using (var session = store.OpenSession()) { var user = new User { Id = "users/1", AddressId = "addresses/1", Name = "John" }; var address = new Address { Id = "addresses/1", City = "New York", Country = "USA", Street = "Wall Street" }; session.Store(user); session.Store(address); session.SaveChanges(); } using (var session = store.OpenSession()) { Assert.Equal(0, session.Advanced.NumberOfRequests); var user = session .Include<User>(x => x.AddressId) .Load<User>("users/1"); Assert.Equal(1, session.Advanced.NumberOfRequests); Assert.NotNull(user); Assert.Equal("John", user.Name); var address = session.Load<Address>(user.AddressId); Assert.Equal(1, session.Advanced.NumberOfRequests); Assert.Equal("New York", address.City); } } }
public void CanStreamDocumentsFromSpecifiedEtag() { using (var store = GetDocumentStore()) { Etag fromEtag; using (var session = store.OpenSession()) { User hundredthUser = null; for (int i = 0; i < 200; i++) { var user = new User(); session.Store(user); if (i == 99) { hundredthUser = user; } } session.SaveChanges(); fromEtag = session.Advanced.GetEtagFor(hundredthUser); } int count = 0; using (var session = store.OpenSession()) { using (var reader = session.Advanced.Stream<User>(fromEtag: fromEtag)) { while (reader.MoveNext()) { count++; Assert.IsType<User>(reader.Current.Document); } } } Assert.Equal(100, count); } }
public void CanGetChangesInformation() { using (var store = GetDocumentStore()) { using (var session = store.OpenSession()) { Assert.False(session.Advanced.HasChanges); var user = new User { Id = "users/1", Name = "John" }; session.Store(user); Assert.True(session.Advanced.HasChanged(user)); Assert.True(session.Advanced.HasChanges); session.SaveChanges(); Assert.False(session.Advanced.HasChanged(user)); Assert.False(session.Advanced.HasChanges); user.AddressId = "addresses/1"; Assert.True(session.Advanced.HasChanged(user)); Assert.True(session.Advanced.HasChanges); var whatChanged = session.Advanced.WhatChanged(); Assert.Equal("AddressId", ((DocumentsChanges[])whatChanged["users/1"])[0].FieldName); Assert.Equal("", ((DocumentsChanges[])whatChanged["users/1"])[0].FieldOldValue); Assert.Equal("addresses/1", ((DocumentsChanges[])whatChanged["users/1"])[0].FieldNewValue); session.Advanced.Clear(); Assert.False(session.Advanced.HasChanges); var user2 = new User { Id = "users/2", Name = "John" }; session.Store(user2); session.Delete(user2); Assert.True(session.Advanced.HasChanged(user2)); Assert.True(session.Advanced.HasChanges); } } }
public void StoringDocumentWithTheSameIdInTheSameSessionShouldThrow() { using (var store = GetDocumentStore()) { using (var session = store.OpenSession()) { var user = new User { Id = "users/1", Name = "User1" }; session.Store(user); session.SaveChanges(); user = new User { Id = "users/1", Name = "User2" }; var e = Assert.Throws<NonUniqueObjectException>(() => session.Store(user)); Assert.Equal("Attempted to associate a different object with id 'users/1'.", e.Message); } } }
public async Task CanDelete() { using (var store = GetDocumentStore()) { using (var session = store.OpenAsyncSession()) { var entity1 = new User { Name = "Andy A" }; var entity2 = new User { Name = "Andy B" }; var entity3 = new User { Name = "Andy C" }; await session.StoreAsync(entity1); await session.StoreAsync(entity2); await session.StoreAsync(entity3); await session.SaveChangesAsync(); session.Delete(entity1); session.Delete("users/2"); session.Delete<User>(3); await session.SaveChangesAsync(); var users = await session.LoadAsync<User>(new [] { "users/1", "users/2", "users/3" }); users.ForEach(Assert.Null); } } }
public void CanUseRefresh() { using (var store = GetDocumentStore()) { using (var session = store.OpenSession()) { var user = new User { Id = "users/1", Name = "John" }; session.Store(user); session.SaveChanges(); } using (var session = store.OpenSession()) { var user = session.Load<User>("users/1"); Assert.NotNull(user); Assert.Equal("John", user.Name); var u = store.DatabaseCommands.Get("users/1"); u.DataAsJson["Name"] = "Jonathan"; store.DatabaseCommands.Put("users/1", u.Etag, u.DataAsJson, u.Metadata); user = session.Load<User>("users/1"); Assert.NotNull(user); Assert.Equal("John", user.Name); session.Advanced.Refresh(user); Assert.NotNull(user); Assert.Equal("Jonathan", user.Name); } } }
public void CanUseIsLoaded() { using (var store = GetDocumentStore()) { using (var session = store.OpenSession()) { var user = new User { Id = "users/1", Name = "John" }; session.Store(user); session.SaveChanges(); } using (var session = store.OpenSession()) { Assert.False(session.Advanced.IsLoaded("users/1")); session.Load<User>("users/1"); Assert.True(session.Advanced.IsLoaded("users/1")); Assert.False(session.Advanced.IsLoaded("users/2")); session.Advanced.Clear(); Assert.False(session.Advanced.IsLoaded("users/1")); } } }