You are currently browsing legacy 3.0 version of documentation. Click here to switch to the newest 4.2 version.

We can help you with migration to the latest RavenDB

Contact Us Now
see on GitHub

Including documents

You may have read about includes earlier, if not, note that 'includes' option gives you the ability to side-load additional documents in a single server call. Transformers also contain this powerful feature and you can take advantage of it by using Include method.

public class Products_NameCategoryAndSupplier : AbstractTransformerCreationTask<Product>
{
	public class Result
	{
		public string Name { get; set; }

		public string Category { get; set; }

		public string Supplier { get; set; }
	}

	public Products_NameCategoryAndSupplier()
	{
		TransformResults =
			products =>
			from product in products
			let supplier = Include<Supplier>(product.Supplier)
			let category = Include<Category>(product.Category)
			select new
			{
				Name = product.Name,
				Category = product.Category,
				Supplier = product.Supplier
			};
	}
}

Products_NameCategoryAndSupplier.Result result = session
	.Query<Product>()
	.Where(x => x.Name == "Chocolade")
	.TransformWith<Products_NameCategoryAndSupplier, Products_NameCategoryAndSupplier.Result>()
	.First();

int numberOfRequests = session.Advanced.NumberOfRequests;

Category category = session.Load<Category>(result.Category); // no server call
Supplier supplier = session.Load<Supplier>(result.Supplier); // no server call

Assert.Equal(numberOfRequests, session.Advanced.NumberOfRequests);