如何在My Sql数据库中使用AspNet.Identity核心

时间:2017-09-19 10:54:14

标签: mysql asp.net asp.net-core-mvc asp.net-identity-2

我正在使用 asp.net net core 2 使用 MySql数据库开发一个应用程序。请帮助我如何使用 Asp Net Identity MySqlDatabase

4 个答案:

答案 0 :(得分:15)

我必须为客户做这件事。我在使用ASP.NET Core 1.0的应用程序中做了,但出于好奇,我还尝试在.NET Core 2.0中使用应用程序。

我所做的是首先使用包管理器控制台从https://www.nuget.org/packages/Pomelo.EntityFrameworkCore.MySql/安装Entity Framework MySQL包。

之后我在 startup.cs 中更改了方法 ConfigureServices ,选项 UseSqlServer UseMySql ,如下图所示。

enter image description here

在我的appsettings.json中,我有一个名为IdentityConnection的MySQL连接,如下所示:

{
    "ConnectionStrings": {
        "IdentityConnection": "Server=127.0.0.1;Database=identitycoredb;Uid=root;Pwd=1234;"
    },

要创建标识表,我在包管理器控制台中执行了迁移命令:

EntityFrameworkCore\Update-Database -Verbose

enter image description here

答案 1 :(得分:3)

编辑: 此时,.Net Core 2.0不支持使用MySql进行身份验证,在不久的将来可能会再次支持。

__

您需要使用Pomelo的连接插入带有MySQL的Entity Framework,并且Identity应该可以正常工作。看看这个 - > https://damienbod.com/2016/08/26/asp-net-core-1-0-with-mysql-and-entity-framework-core/

答案 2 :(得分:0)

您可以与MySQL数据库一起创建身份数据库 并使用Identity数据库进行授权

我就是这样做的。

   //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"));

这应该与MySQL DB一起正常工作

public class EFIdentityDbContext : IdentityDbContext
{
    public EFIdentityDbContext(DbContextOptions<EFIdentityDbContext> options )
        :base (options)
    {

    }


}

答案 3 :(得分:0)

我迟到了这个答案,但是,这个开发者已经把整个解决方案很好地放在了这个存储库中。

https://github.com/jasonsturges/mysql-dotnet-core

将相关代码块放在这里。

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);
    });
}

这是我在发布此答案时正在从事的项目中测试的。