Nhibernate.aspnet.identity

ASP.NET Identity providers that use NHibernate


Project maintained by milesibastos Hosted on GitHub Pages — Theme by mattgraham

NHibernate.AspNet.Identity

ASP.NET Identity provider that users NHibernate for storage

Purpose

ASP.NET MVC 5 shipped with a new Identity system (in the Microsoft.AspNet.Identity.Core package) in order to support both local login and remote logins via OpenID/OAuth, but only ships with an Entity Framework provider (Microsoft.AspNet.Identity.EntityFramework).

Features

Instructions

These instructions assume you know how to set up NHibernate within an MVC application.

  1. Create a new ASP.NET MVC 5 project, choosing the Individual User Accounts authentication type.
  2. Remove the Entity Framework packages and replace with NHibernate Identity:
Uninstall-Package Microsoft.AspNet.Identity.EntityFramework
Uninstall-Package EntityFramework
Install-Package NHibernate.AspNet.Identity
  1. In ~/Models/IdentityModels.cs:
    • Remove the namespace: Microsoft.AspNet.Identity.EntityFramework
    • Add the namespace: NHibernate.AspNet.Identity
    • Remove the ApplicationDbContext class completely.
  2. In ~/Controllers/AccountController.cs

    • Remove the namespace: Microsoft.AspNet.Identity.EntityFramework
    • Add the relevant ISession implementation that will be used by default. This could be from a DI implementation. Note: This isn't mandatory, if you are using a framework that will inject the dependency, you shouldn't need the parameterless constructor.
  3. Setup configuration code

NHibernate

    // this assumes you are using the default Identity model of "ApplicationUser"
    var myEntities = new [] {
        typeof(ApplicationUser)
    };

    var configuration = new Configuration();
    configuration.Configure("sqlite-nhibernate-config.xml");
    configuration.AddDeserializedMapping(MappingHelper.GetIdentityMappings(myEntities), null);

    var factory = configuration.BuildSessionFactory();
    var session = factory.OpenSession();

    var userManager = new UserManager<ApplicationUser>(
        new UserStore<ApplicationUser>(session);

FluentNHibernate

    // this assumes you are using the default Identity model of "ApplicationUser"
    var myEntities = new [] {
        typeof(ApplicationUser)
    };

    var configuration = Fluently.Configure()
       .Database(/*.....*/)
       .ExposeConfiguration(cfg => {
           cfg.AddDeserializedMapping(MappingHelper.GetIdentityMappings(myEntities), null);
        });

    var factory = configuration.BuildSessionFactory();
    var session = factory.OpenSession();

    var userManager = new UserManager<ApplicationUser>(
        new UserStore<ApplicationUser>(session);

Thanks To

Special thanks to David Boike whos RavenDB AspNet Identity project gave me the base for jumpstarting the NHibernate provider