Skip to main content

Creating ASP.NET MVC 4 Project with RavenDB

In this section we will go over the steps to creating you own ASP.NET MVC4 Application.

Prerequisites

  1. Make sure you have the Microsoft ASP.NET MVC 4 installed.
  2. You have installed NuGet package manager
  3. You are running Visual Studio 2010 or greater

Step by Step Instructions

  1. Open the Micrsooft Visual Studio IDE. Create a new "ASP.NET MVC 4 Web Application" project.
  2. As Project template select "Basic".
  3. Add the NuGet Package named "RavenDB Client".
  4. Create the following controller:
public abstract class RavenController : Controller
{
public static IDocumentStore DocumentStore
{
get { return DocumentStoreHolder.Store; }
}

public IDocumentSession RavenSession { get; protected set; }

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
RavenSession = DocumentStoreHolder.Store.OpenSession();
}

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.IsChildAction)
return;

using (RavenSession)
{
if (filterContext.Exception != null)
return;

if (RavenSession != null)
RavenSession.SaveChanges();
}

TaskExecutor.StartExecuting();
}

protected HttpStatusCodeResult HttpNotModified()
{
return new HttpStatusCodeResult(304);
}

protected ActionResult Xml(XDocument xml, string etag)
{
return new XmlResult(xml, etag);
}

protected new JsonResult Json(object data)
{
return base.Json(data, JsonRequestBehavior.AllowGet);
}
}
  1. From now on, write you application as you would normally, but make any controller that needs to talk to RavenDB inherit from RavenController.

Example of a controller:

public class HomeController : RavenController
{
//
// GET: /Home/

public ActionResult Index()
{
var items = RavenSession.Query<SampleData>().ToList();
return View("Index", items);
}

public ActionResult Add(string name)
{
var sampleData = new SampleData { CreatedAt = SystemTime.UtcNow, Name = name };
RavenSession.Store(sampleData);
return RedirectToAction("Edit", new { id = sampleData.Id });
}

public ActionResult Edit(int id)
{
var sampleData = RavenSession.Load<SampleData>(id);
return View("Index", new List<SampleData> { sampleData });
}
}