Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Example of using asp.net 5 MVC 6 with Identity and EF 6

I'm setting up a new project using asp.net 5 and MVC 6, but I want to use Entity Framework 6 due to the missing features in EF 7.

I setup EF 6.1.3 and that is working.

Identity 3.0 depends on EF 7 so I have removed that and referenced in Identity 2.2 but I'm not sure where to go from here.

like image 735
Tom Avatar asked Mar 26 '15 22:03

Tom


2 Answers

I'm not sure how this will be handled in the final release of ASP.NET 5, but in the case of ASP.NET 5 RC1 we have the following:

Firstly, you should go with Identity 3.0, as there is no way to use Identity 2.x in MVC 6 as far as I know.

Secondly, to make Identity 3.0 work with EF6, you need to implementation your own "EF6-friendly" versions of all classes under Microsoft.AspNet.Identity.EntityFramework namespace (the code is available here- https://github.com/aspnet/Identity/tree/3.0.0-rc1/src/Microsoft.AspNet.Identity.EntityFramework), as original classes are meant to work with EF7 only:

  • IdentityDbContext
  • RoleStore
  • UserStore
  • IdentityRole
  • IdentityRoleClaim
  • IdentityUser
  • IdentityUserClaim
  • IdentityUserLogin
  • IdentityUserRole

Your implementations should utilize EF6 instead of EF7. The process is pretty straightforward, but if you want to save time, I have shared my implementation here:

https://github.com/EntrypointSoft/AspNet.Identity.EntityFramework6

like image 96
Gena Hrapan Avatar answered Sep 22 '22 15:09

Gena Hrapan


This comes in a few parts.

  1. You can use Microsoft.AspNet.Identity 3.0.0, but you will need to make your own UserStore and RoleStore. Personally, I copied the source of UserStore.cs and RoleStore.cs and made the tweaks necessary to use my EF6 User and Role classes. They have some additional features not used by default in EF6, such as normalizing usernames, email addresses, and role names that you'll need to support (or work around), but the interfaces only require POCOs, so you will be good there.
  2. Follow the Identity Sample MVC project, but with your own Stores specified in your Startup file:
services.AddIdentity<MyEf6User, MyEf6Role>()
    .AddRoleStore<MyEf6RoleStore>()
    .AddUserStore<MyEf6UserStore>();
  1. Be very aware that the Microsoft.AspNet.Identity (and all of asp.net 5) is still a work-in-progress, and things such as the bearer token are largely undocumented, and the Identity 3 does have a bit more set up than Identity 2.x; it will require some tweaking and will change for CTP 7 and other future releases.
like image 22
Matt DeKrey Avatar answered Sep 24 '22 15:09

Matt DeKrey