I am developing one application using asp dot net core 2 using MySql database.Please help me How can i use Asp Net Identity in MySqlDatabase.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
I had to do this for a client. And I did in an application with ASP.NET Core 1.0, but for curiosity I also tried for an application in .NET Core 2.0.
What I did was first install the Entity Framework MySQL package from https://www.nuget.org/packages/Pomelo.EntityFrameworkCore.MySql/ using package manager console.
After that I changed in the startup.cs, in the method ConfigureServices, the option UseSqlServer to UseMySql, like the image below.
In my appsettings.json I have the MySQL connection named IdentityConnection like this:
{
"ConnectionStrings": {
"IdentityConnection": "Server=127.0.0.1;Database=identitycoredb;Uid=root;Pwd=1234;"
},
To create the identity tables I executed the migration command in package manager console:
EntityFrameworkCoreUpdate-Database -Verbose
Method 2
EDIT:
At this point, .Net Core 2.0 doesn’t support Identity with MySql, in a near future it may be supported again.
__
You need to plug Entity Framework with MySQL with Pomelo’s connection and Identity should work. Check this out -> https://damienbod.com/2016/08/26/asp-net-core-1-0-with-mysql-and-entity-framework-core/
Method 3
You Can create an Identity Database along with your MySQL Database
and use the Identity database for your authorization
This is how I do it.
//MySQL Database
services.AddDbContext<EFDbContext>(options =>
options.UseSqlServer("Server = ; Database =MySQL ; Trusted_Connection = True; MultipleActiveResultSets = true"));
//Identity Database
services.AddDbContext<EFIdentityDbContext>(options =>
options.UseSqlServer("Server = ; Database = Identity; Trusted_Connection = True; MultipleActiveResultSets = true"));
This should work fine along with your MySQL DB
public class EFIdentityDbContext : IdentityDbContext
{
public EFIdentityDbContext(DbContextOptions<EFIdentityDbContext> options )
:base (options)
{
}
}
Method 4
I am late to this answer but, this developer has put the whole solution nicely, in this repository.
https://github.com/jasonsturges/mysql-dotnet-core
Putting the relevant code blocks here.
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<IdentityRole>(entity => entity.Property(m => m.Id).HasMaxLength(127));
builder.Entity<IdentityRole>(entity => entity.Property(m => m.ConcurrencyStamp).HasColumnType("varchar(256)"));
builder.Entity<IdentityUserLogin<string>>(entity =>
{
entity.Property(m => m.LoginProvider).HasMaxLength(127);
entity.Property(m => m.ProviderKey).HasMaxLength(127);
});
builder.Entity<IdentityUserRole<string>>(entity =>
{
entity.Property(m => m.UserId).HasMaxLength(127);
entity.Property(m => m.RoleId).HasMaxLength(127);
});
builder.Entity<IdentityUserToken<string>>(entity =>
{
entity.Property(m => m.UserId).HasMaxLength(127);
entity.Property(m => m.LoginProvider).HasMaxLength(127);
entity.Property(m => m.Name).HasMaxLength(127);
});
}
This is tested by me on a project i was working on at the time of posting this answer.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

