ASP.NET Core & ASP.NET Core MVC extensions for Marten.
Packages Marten.AspNetCore, Marten.AspNetCore.Mvc | Platforms .NET Standard 2.0
// Bootstrap
public void ConfigureServices(IServiceCollection services)
{
services
// Registers IDocumentStore for DI (scoped to Singleton as per Marten best practices)
.UseMarten(c => c.Connection("cstring"))
// Registers IDocumentSession, IQuerySession, IEventStore for DI (default scope Scoped)
.UseSessions();
services.AddMvc()
// Automatically save IDocumentSession changes on request processing
.WithMartenSessionsSaved(saveOnHttpMethods: new [] { "POST", "PATCH" });
// Or for IDocumentSession.SaveChangesAsync
// .WithMartenSessionsSavedAsync(saveOnHttpMethods: new [] { "POST", "PATCH" }
}
Additional optional arguments are documented.
// Sample Controller
[Route("api/[controller]")]
[ApiController]
public class DummyDocumentSessionController : ControllerBase
{
private readonly IDocumentSession session;
public DummyDocumentSessionController(IDocumentSession session)
{
this.session = session;
}
[HttpGet]
public ActionResult<IEnumerable<Dummy>> Get()
{
// Access to scoped session
return session.Query<Dummy>().Where(x => x.Value != null).ToList();
}
[HttpPost]
public void Post([FromBody] string value)
{
var o = new Dummy { Value = value };
// Changes are automatically saved after the request has been processed
session.Insert(o);
}
}
Note: This is a contributor project.