How-To get consecutive id with RavenDb default id generator
I'm evaluating RavenDB for a new project.
If i create 100 entities i got great consecutive ids like :
- posts/1
- posts/2
- posts/3
- ...
- posts/100
But if i build a new DocumentStore instance (after App Restart) and try to create new entit开发者_如何学Cies i got strange ids like this :
- posts/1025
- posts/1026
- posts/1027
Any help ?
Note : I'm using Embedded Server with ASP.NET MVC 3
This is by design - new HiLo keys are generated whenever you create a DocumentStore instance, so the gaps you are seeing are the unused ids from the other session.
Why do you care for consecutive ids?
This may be a good read on the subject, too: http://groups.google.com/group/ravendb/browse_thread/thread/3dbcacbc8b366ff8/
From the RavenDb documents, you're after the Identity strategy.
RavenDB also supports the notion of Identity, for example if you need IDs to be consecutive. By creating a string Id property in your entity, and setting it to a value ending with a slash (/), you can tell RavenDB to use that as a key perfix for your entity. That prefix followed by the next available integer ID for it will be your entity's ID after you call SaveChanges().
eg.
var foo = new Foo();
foo.Id = "foo/"; // <-- this will use the Identity strategy, not HiLo.
session.Store(foo);
session.SaveChanges();
You might want to look at the identity option for RavenDB, but that isn't really something that you should care about.
You can set an identifier by your client, while still relying on the server to generate the identifier for you. It is done using the NextIdentityForCommand command:
var command = new NextIdentityForCommand("<<your collection name>>");
Session.Advanced.RequestExecutor.Execute(command, Session.Advanced.Context);
var id = command.Result;
This way you can use the identity value even in different field from Id. On the other hand, this makes creating a document slower, because you have to approach a server twice.
精彩评论