Skip to main content

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
instanceTInstance of an entity for which metadata will be returned.
Return Value
IMetadataDictionaryReturns the metadata for the specified entity. Throws an exception if the instance is not tracked by the session.

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.

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();