コード例 #1
0
ファイル: RavenDB-5632.cs プロジェクト: xinix00/ravendb
        public void can_resolve_conflicts_using_load()
        {
            const string userDocumentId = "users/someuser";

            using (var store1 = CreateStore(databaseName: DefaultDatabase))
                using (var store2 = CreateStore(databaseName: DefaultDatabase))
                {
                    store1.Initialize();
                    store2.Initialize();

                    using (var session1 = store1.OpenSession())
                        using (var session2 = store2.OpenSession())
                        {
                            session1.Store(new User {
                                Name = "Name"
                            }, userDocumentId);
                            session1.SaveChanges();

                            session2.Store(new User {
                                Name = "AnotherName"
                            }, userDocumentId);
                            session2.SaveChanges();
                        }

                    store2.RegisterListener(new MergeConflicts());

                    var changes = store2.Changes();
                    using (var conflictObserver = new ConflictObserver())
                        using (changes.ForAllReplicationConflicts().Subscribe(conflictObserver))
                        {
                            changes.WaitForAllPendingSubscriptions();

                            var destinations = new List <RavenJObject>
                            {
                                new RavenJObject
                                {
                                    { "Url", store2.Url },
                                    { "Database", store2.DefaultDatabase },
                                    { "TransitiveReplicationBehavior", "Replicate" }
                                }
                            };

                            store1.DatabaseCommands.Put(Constants.RavenReplicationDestinations,
                                                        null, new RavenJObject
                            {
                                {
                                    "Destinations", new RavenJArray(destinations)
                                }
                            }, new RavenJObject());

                            conflictObserver.WaitOne();
                        }

                    using (var session = store2.OpenSession())
                    {
                        var user = session.Load <User>(userDocumentId);
                        Assert.Equal(user.Name, "AnotherName Name");
                    }
                }
        }
コード例 #2
0
ファイル: RavenDB-5632.cs プロジェクト: xinix00/ravendb
        public void can_resolve_conflicts_using_query()
        {
            using (var store1 = CreateStore(databaseName: DefaultDatabase))
                using (var store2 = CreateStore(databaseName: DefaultDatabase))
                {
                    store1.Initialize();
                    store2.Initialize();

                    using (var session1 = store1.OpenSession())
                        using (var session2 = store2.OpenSession())
                        {
                            session1.Store(new User {
                                Name = "Name"
                            });
                            session1.Store(new User {
                                Name = "Name2"
                            });
                            session1.SaveChanges();

                            session2.Store(new User {
                                Name = "AnotherName"
                            });
                            session2.Store(new User {
                                Name = "AnotherName2"
                            });
                            session2.SaveChanges();
                        }

                    store2.RegisterListener(new MergeConflicts());

                    var changes = store2.Changes();
                    using (var conflictObserver = new ConflictObserver())
                        using (changes.ForAllReplicationConflicts().Subscribe(conflictObserver))
                        {
                            changes.WaitForAllPendingSubscriptions();
                            conflictObserver.DesiredConflicts = 2;

                            var destinations = new List <RavenJObject>
                            {
                                new RavenJObject
                                {
                                    { "Url", store2.Url },
                                    { "Database", store2.DefaultDatabase },
                                    { "TransitiveReplicationBehavior", "Replicate" }
                                }
                            };

                            store1.DatabaseCommands.Put(Constants.RavenReplicationDestinations,
                                                        null, new RavenJObject
                            {
                                {
                                    "Destinations", new RavenJArray(destinations)
                                }
                            }, new RavenJObject());

                            conflictObserver.WaitOne();
                        }

                    using (var session = store2.OpenSession())
                    {
                        var users = session.Query <User>().ToList();
                        Assert.Equal(2, users.Count);
                        Assert.True(users[0].Name == "AnotherName Name" || users[0].Name == "AnotherName2 Name2");
                        Assert.True(users[1].Name == "AnotherName Name" || users[1].Name == "AnotherName2 Name2");
                    }
                }
        }