示例#1
0
        public void CanUseClear()
        {
            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);

                    session.Load <User>("users/1");

                    Assert.Equal(1, session.Advanced.NumberOfRequests);

                    session.Advanced.Clear();

                    session.Load <User>("users/1");

                    Assert.Equal(2, session.Advanced.NumberOfRequests);
                }
            }
        }
示例#2
0
        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"));
                }
            }
        }
示例#3
0
        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()));
            }
        }
示例#4
0
        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);
                }
            }
        }
示例#5
0
        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);

                    using (var otherSession = store.OpenSession())
                    {
                        var u = otherSession.Load <User>("users/1");
                        u.Name = "Jonathan";

                        otherSession.SaveChanges();
                    }

                    using (var otherSession = store.OpenSession())
                    {
                        var u = otherSession.Load <User>("users/1");
                        Assert.Equal("Jonathan", u.Name);
                    }

                    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);
                }
            }
        }
示例#6
0
        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));
                    var x = session.Advanced.HasChanges;
                    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(null, ((DocumentsChanges[])whatChanged["users/1"])[0].FieldOldValue);
                    Assert.Equal("addresses/1", ((DocumentsChanges[])whatChanged["users/1"])[0].FieldNewValue.ToString());

                    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);
                }
            }
        }
示例#7
0
        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);
                }
            }
        }
示例#8
0
        public void CanStreamDocumentsFromSpecifiedEtag()
        {
            using (var store = GetDocumentStore())
            {
                long?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);
            }
        }
示例#9
0
        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);

                    DocumentInfo documentInfo;
                    var          document = GetCommand(session, new[] { "users/1" }, out documentInfo);

                    documentInfo.Entity = session.Advanced.ConvertToEntity(typeof(User), "users/1", document);
                    ((User)documentInfo.Entity).Name = "Jonathan";
                    PutCommand(session, documentInfo.Entity, "users/1");

                    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);
                }
            }
        }
示例#10
0
        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("users/3");

                    await session.SaveChangesAsync();

                    var users = await session.LoadAsync <User>(new[] { "users/1", "users/2", "users/3" });

                    foreach (var user in users)
                    {
                        Assert.Null(user.Value);
                    }
                }
            }
        }
示例#11
0
文件: Keys.cs 项目: yitaom2/ravendb
        public async Task KeyGeneration()
        {
            using (var store = GetDocumentStore(new Options
            {
                ModifyDocumentStore = s =>
                {
                    s.Conventions.RegisterAsyncIdConvention <User>((databaseName, entity) => Task.FromResult("def/" + entity.Name));
                }
            }))
            {
                using (var session = store.OpenSession())
                {
                    var user = new User {
                        Name = "John"
                    };
                    session.Store(user);

                    Assert.Equal("def/John", user.Id);
                }

                using (var session = store.OpenAsyncSession())
                {
                    var user = new User {
                        Name = "Bob"
                    };
                    await session.StoreAsync(user);

                    Assert.Equal("def/Bob", user.Id);
                }

                Assert.Equal("def/", store.Conventions.GenerateDocumentId(store.Database, new User()));
                Assert.Equal("def/", await store.Conventions.GenerateDocumentIdAsync(store.Database, new User()));

                Assert.Equal("addresses/1-A", store.Conventions.GenerateDocumentId(store.Database, new Address()));
                Assert.Equal("companies/1-A", await store.Conventions.GenerateDocumentIdAsync(store.Database, new Company()));
            }
        }
示例#12
0
        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);
                }
            }
        }