protected void PopulateInitialDataForNodes()
        {
            var configuration = BuildConfiguration();

            ApplyCustomSettingsToInitialConfiguration(configuration);
            configuration.UpgradeMode = DomainUpgradeMode.Recreate;
            configuration.ShareStorageSchemaOverNodes = false;

            using (var domain = Domain.Build(configuration)) {
                var nodes = GetNodes(DomainUpgradeMode.Recreate);
                foreach (var storageNode in nodes.Where(n => n.NodeId != WellKnown.DefaultNodeId))
                {
                    _ = domain.StorageNodeManager.AddNode(storageNode);
                }

                map = new Dictionary <string, Dictionary <Type, Pair <string> > >();
                foreach (var storageNode in nodes)
                {
                    var typesMap     = new Dictionary <Type, Pair <string> >();
                    var selectedNode = domain.StorageNodeManager.GetNode(storageNode.NodeId);
                    using (var session = selectedNode.OpenSession())
                        using (var transaction = session.OpenTransaction()) {
                            var type = typeof(model.Part1.TestEntity1);
                            var pair = GetDatabaseAndSchemaForType(session, type);
                            _ = new model.Part1.TestEntity1 {
                                Text = session.StorageNodeId, DatabaseName = pair.First, SchemaName = pair.Second
                            };
                            typesMap.Add(type, pair);

                            type = typeof(model.Part2.TestEntity2);
                            pair = GetDatabaseAndSchemaForType(session, typeof(model.Part2.TestEntity2));
                            _    = new model.Part2.TestEntity2 {
                                Text = session.StorageNodeId, DatabaseName = pair.First, SchemaName = pair.Second
                            };
                            typesMap.Add(type, pair);

                            type = typeof(model.Part3.TestEntity3);
                            pair = GetDatabaseAndSchemaForType(session, typeof(model.Part3.TestEntity3));
                            _    = new model.Part3.TestEntity3 {
                                Text = session.StorageNodeId, DatabaseName = pair.First, SchemaName = pair.Second
                            };
                            typesMap.Add(type, pair);

                            type = typeof(model.Part4.TestEntity4);
                            pair = GetDatabaseAndSchemaForType(session, typeof(model.Part4.TestEntity4));
                            _    = new model.Part4.TestEntity4 {
                                Text = session.StorageNodeId, DatabaseName = pair.First, SchemaName = pair.Second
                            };
                            typesMap.Add(type, pair);

                            transaction.Complete();
                        }
                    map.Add(storageNode.NodeId, typesMap);
                }
            }
        }
Example #2
0
        private Key[] Insert(Session session, int initialCountOfEntities)
        {
            var storageNodeId = session.StorageNodeId;
            Dictionary <Type, Pair <string> > typesMap;

            if (!map.TryGetValue(storageNodeId, out typesMap))
            {
                throw new Exception(string.Format("Unknown node {0}. Probably you don't populate data", storageNodeId));
            }

            var text = string.Format("{0}_new", storageNodeId);

            var a = new model.Part1.TestEntity1 {
                Text = text
            };
            var databaseAndSchema = typesMap[a.GetType()];

            a.DatabaseName = databaseAndSchema.First;
            a.SchemaName   = databaseAndSchema.Second;

            session.SaveChanges();
            Assert.That(session.Query.All <model.Part1.TestEntity1>().Count(), Is.EqualTo(initialCountOfEntities + 1));
            a = session.Query.All <model.Part1.TestEntity1>().FirstOrDefault(e => e.Text == text && e.DatabaseName == databaseAndSchema.First && e.SchemaName == databaseAndSchema.Second);
            Assert.That(a, Is.Not.Null);

            var b = new model.Part2.TestEntity2 {
                Text = text
            };

            databaseAndSchema = typesMap[b.GetType()];
            b.DatabaseName    = databaseAndSchema.First;
            b.SchemaName      = databaseAndSchema.Second;

            session.SaveChanges();
            Assert.That(session.Query.All <model.Part2.TestEntity2>().Count(), Is.EqualTo(initialCountOfEntities + 1));
            b = session.Query.All <model.Part2.TestEntity2>().FirstOrDefault(e => e.Text == text && e.DatabaseName == databaseAndSchema.First && e.SchemaName == databaseAndSchema.Second);
            Assert.That(b, Is.Not.Null);

            var c = new model.Part3.TestEntity3 {
                Text = text
            };

            databaseAndSchema = typesMap[c.GetType()];
            c.DatabaseName    = databaseAndSchema.First;
            c.SchemaName      = databaseAndSchema.Second;

            session.SaveChanges();
            Assert.That(session.Query.All <model.Part3.TestEntity3>().Count(), Is.EqualTo(initialCountOfEntities + 1));
            c = session.Query.All <model.Part3.TestEntity3>().FirstOrDefault(e => e.Text == text && e.DatabaseName == databaseAndSchema.First && e.SchemaName == databaseAndSchema.Second);
            Assert.That(c, Is.Not.Null);

            var d = new model.Part4.TestEntity4 {
                Text = text
            };

            databaseAndSchema = typesMap[d.GetType()];
            d.DatabaseName    = databaseAndSchema.First;
            d.SchemaName      = databaseAndSchema.Second;

            session.SaveChanges();
            Assert.That(session.Query.All <model.Part4.TestEntity4>().Count(), Is.EqualTo(initialCountOfEntities + 1));
            d = session.Query.All <model.Part4.TestEntity4>().FirstOrDefault(e => e.Text == text && e.DatabaseName == databaseAndSchema.First && e.SchemaName == databaseAndSchema.Second);
            Assert.That(d, Is.Not.Null);

            return(new Key[] { a.Key, b.Key, c.Key, d.Key });
        }