コード例 #1
0
ファイル: Advanced.cs プロジェクト: IdanHaim/ravendb
        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);
                }
            }
        }
コード例 #2
0
ファイル: Keys.cs プロジェクト: IdanHaim/ravendb
        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()));
            }
        }
コード例 #3
0
ファイル: UnitOfWork.cs プロジェクト: WimVergouwe/ravendb
		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);
				}
			}
		}
コード例 #4
0
		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);
				}
			}
		}
コード例 #5
0
ファイル: Includes.cs プロジェクト: WimVergouwe/ravendb
		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);
				}
			}
		}
コード例 #6
0
		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);
			}
		}
コード例 #7
0
ファイル: Advanced.cs プロジェクト: IdanHaim/ravendb
        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);
                }
            }
        }
コード例 #8
0
ファイル: Crud.cs プロジェクト: heinnge/ravendb
        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);
                }
            }
        }
コード例 #9
0
ファイル: Crud.cs プロジェクト: heinnge/ravendb
        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);
                }
            }
        }
コード例 #10
0
ファイル: Advanced.cs プロジェクト: IdanHaim/ravendb
        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);
                }
            }
        }
コード例 #11
0
ファイル: Advanced.cs プロジェクト: IdanHaim/ravendb
        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"));
                }
            }
        }