Пример #1
0
        public void WhenDocumentAlreadyExists_Can_Still_Generate_Values()
        {
            using (var store = NewDocumentStore())
            {
                var mk = new MultiTypeHiLoKeyGenerator(5);
                store.Conventions.DocumentKeyGenerator = (cmd, o) => mk.GenerateDocumentKey(cmd, store.Conventions, o);


                using (var session = store.OpenSession())
                {
                    var company = new Company();
                    session.Store(company);
                    var contact = new Contact();
                    session.Store(contact);

                    Assert.Equal("companies/1", company.Id);
                    Assert.Equal("contacts/1", contact.Id);
                }

                mk = new MultiTypeHiLoKeyGenerator(5);
                store.Conventions.DocumentKeyGenerator = (cmd, o) => mk.GenerateDocumentKey(cmd, store.Conventions, o);

                using (var session = store.OpenSession())
                {
                    var company = new Company();
                    session.Store(company);
                    var contact = new Contact();
                    session.Store(contact);

                    Assert.Equal("companies/6", company.Id);
                    Assert.Equal("contacts/6", contact.Id);
                }
            }
        }
Пример #2
0
        public string GenerateDocumentKey(IDatabaseCommands databaseCommands, DocumentConvention conventions, object entity)
        {
            var shardId = shardedDocumentStore.ShardStrategy.ShardResolutionStrategy.MetadataShardIdFor(entity);

            if (shardId == null)
            {
                throw new InvalidOperationException(string.Format(
                                                        "ShardResolutionStrategy.MetadataShardIdFor cannot return null. You must specify where to store the metadata documents for the entity type '{0}'.", entity.GetType().FullName));
            }

            MultiTypeHiLoKeyGenerator value;

            if (generatorsByShard.TryGetValue(shardId, out value))
            {
                return(value.GenerateDocumentKey(databaseCommands, conventions, entity));
            }

            lock (this)
            {
                if (generatorsByShard.TryGetValue(shardId, out value) == false)
                {
                    value             = new MultiTypeHiLoKeyGenerator(capacity);
                    generatorsByShard = new Dictionary <string, MultiTypeHiLoKeyGenerator>(generatorsByShard)
                    {
                        { shardId, value }
                    };
                }
            }

            return(value.GenerateDocumentKey(databaseCommands, conventions, entity));
        }
Пример #3
0
        public void DocumentKeyGenerator()
        {
            var generator = new MultiTypeHiLoKeyGenerator(5);

            store.Conventions.DocumentKeyGenerator = (dbName, cmd, entity) => generator.GenerateDocumentKey(cmd, store.Conventions, entity);
            store.Initialize();
        }
        public void DocumentKeyGenerator()
        {
            var generator = new MultiTypeHiLoKeyGenerator(store, 5);

            store.Conventions.DocumentKeyGenerator = entity => generator.GenerateDocumentKey(store.Conventions, entity);
            store.Initialize();
        }
Пример #5
0
        static MultiTypeHiLoKeyGenerator GetGenerator(IDocumentSession session)
        {
            if (generator == null)
            {
                generator = new MultiTypeHiLoKeyGenerator(session.Advanced.DocumentStore, 32);
            }

            return(generator);
        }
Пример #6
0
 public void DoesNotLoseValuesWhenHighIsOver()
 {
     using (var store = NewDocumentStore())
     {
         var mk = new MultiTypeHiLoKeyGenerator(5);
         for (int i = 0; i < 15; i++)
         {
             Assert.Equal("companies/" + (i + 1),
                          mk.GenerateDocumentKey(store.DatabaseCommands, store.Conventions, new Company()));
         }
     }
 }