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); } } }
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)); }
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(); }
static MultiTypeHiLoKeyGenerator GetGenerator(IDocumentSession session) { if (generator == null) { generator = new MultiTypeHiLoKeyGenerator(session.Advanced.DocumentStore, 32); } return(generator); }
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())); } } }