public void WhenStoringUser()
        {
            string id;
            using (var session = ShardedDocumentStore.OpenSession())
            {
                var entity = new User { Name = "Fitzchak Yitzchaki" };
                session.Store(entity);
                id = entity.Id;
                AssertNumberOfRequests(Servers["Users"], 2); // HiLo

                session.SaveChanges();
                AssertNumberOfRequests(Servers["Users"], 3);
                Servers.Where(ravenDbServer => ravenDbServer.Key != "Users")
                    .ForEach(server => AssertNumberOfRequests(server.Value, 0));
            }

            using (var session = ShardedDocumentStore.OpenSession())
            {
                var user = session.Load<User>(id);
                Assert.NotNull(user);
                Assert.Equal("Fitzchak Yitzchaki", user.Name);

                AssertNumberOfRequests(Servers["Users"], 4);
                Servers.Where(ravenDbServer => ravenDbServer.Key != "Users")
                    .ForEach(server => AssertNumberOfRequests(server.Value, 0));
            }
        }
        public void LazyLoadOperationWillHandleIncludes()
        {
            var ids = new List<string>();
            using (var session = ShardedDocumentStore.OpenSession())
            {
                for (int i = 1; i <= 4; i++)
                {
                    var entity = new User {Name = ids.LastOrDefault()};
                    session.Store(entity);
                    ids.Add(entity.Id);
                }
                session.SaveChanges();
            }
            using (var session = ShardedDocumentStore.OpenSession())
            {
                var result1 = session.Advanced.Lazily
                    .Include("Name")
                    .Load<User>(ids[1]);
                var result2 = session.Advanced.Lazily
                    .Include("Name")
                    .Load<User>(ids[3]);

                Assert.NotNull(result1.Value);
                Assert.NotNull(result2.Value);
                Assert.True(session.Advanced.IsLoaded(result1.Value.Name));
                Assert.True(session.Advanced.IsLoaded(result2.Value.Name));
            }
        }
        public void MultiLoadShouldWork()
        {
            string id;
            using (var session = ShardedDocumentStore.OpenSession())
            {
                var entity = new User { Name = "Fitzchak Yitzchaki" };
                session.Store(entity);
                id = entity.Id;
                session.SaveChanges();
            }

            using (var session = ShardedDocumentStore.OpenSession())
            {
                var users = session.Load<User>(new [] { id, "does not exists" });
                Assert.NotNull(users);
                Assert.Equal(2, users.Length);
                Assert.Equal("Fitzchak Yitzchaki", users[0].Name);

                Assert.Null(users[1]);
            }
        }
        public void LazyMultiLoadOperationWouldBeInTheSession()
        {
            var ids = new List<string>();
            using (var session = ShardedDocumentStore.OpenSession())
            {
                for (int i = 1; i <= 4; i++)
                {
                    var entity = new User {Id = "users/" + i, Name = ids.LastOrDefault()};
                    session.Store(entity);
                    ids.Add(entity.Id);
                }
                session.SaveChanges();
            }
            AssertNumberOfRequests(Servers["Users"], 1);
            Servers.Where(server => server.Key != "Users")
                .ForEach(server => AssertNumberOfRequests(server.Value, 0));

            using (var session = ShardedDocumentStore.OpenSession())
            {
                var result1 = session.Advanced.Lazily.Load<User>(new[] { ids[0], ids[1] });
                var result2 = session.Advanced.Lazily.Load<User>(new[] { ids[2], ids[3] });

                var a = result1.Value;
                Assert.Equal(2, a.Length);
                AssertNumberOfRequests(Servers["Users"], 2);
                Servers.Where(server => server.Key != "Users")
                    .ForEach(server => AssertNumberOfRequests(server.Value, 0));

                var b = result2.Value;
                Assert.Equal(2, b.Length);
                AssertNumberOfRequests(Servers["Users"], 2);
                Servers.Where(server => server.Key != "Users")
                    .ForEach(server => AssertNumberOfRequests(server.Value, 0));

                foreach (var user in b.Concat(a))
                {
                    Assert.NotNull(session.Advanced.GetMetadataFor(user));
                }
            }
        }