see on GitHub

Session : How to Get and Modify Entity Metadata

When a document is downloaded from the server, it contains various metadata information like ID or current change-vector. This information is stored in a session and is available for each entity using the GetMetadataFor method from the Advanced session operations.

Get the Metadata

IMetadataDictionary GetMetadataFor<T>(T instance);

Parameters
instance T Instance of an entity for which metadata will be returned.
Return Value
IMetadataDictionary Returns the metadata for the specified entity. If the instance is transient, it will load the metadata from the store and associate the current state of the entity with the metadata from the server.

Example

var employee = session.Load<Employee>("employees/1-A");
var metadata = session.Advanced.GetMetadataFor(employee);

Modify the Metadata

After getting the metadata from session.Advanced.GetMetadataFor you can modify it just like any other dictionary.

Note

Keys in the metadata that starting with @ are reserved for RavenDB use

Example I

var user = new User
{
    Name = "Idan"
};

session.Store(user);
var metadata = session.Advanced.GetMetadataFor(user);
metadata["Permissions"] = "ReadOnly";
session.SaveChanges();

Example II

var user = session.Load<User>("users/1-A");
var metadata = session.Advanced.GetMetadataFor(user);

metadata["Permissions"] = "ReadAndWrite";

session.SaveChanges();