将ASP.NET核心标识从SQL Server迁移到MySQL时出现问题
现在MySQL数据库提供程序已经发布(“预发布”),我正在将我的ASP.NET核心项目从使用Microsoft SQL Server迁移到MySQL。在使用SQL Server时,我使用核心标识作为成员身份,它在该配置中工作。当我将数据库迁移到MySQL时(使用MySQL工作台中的迁移向导),我在将新用户保存到数据库时开始收到以下错误: 找不到CLR类型“Microsoft.EntityFrameworkCore.Metadata.Internal.Property”与关系类型的映射 执行CreateAsync方法时,此代码中出现错误:将ASP.NET核心标识从SQL Server迁移到MySQL时出现问题,mysql,asp.net,sql-server,asp.net-core,asp.net-identity,Mysql,Asp.net,Sql Server,Asp.net Core,Asp.net Identity,现在MySQL数据库提供程序已经发布(“预发布”),我正在将我的ASP.NET核心项目从使用Microsoft SQL Server迁移到MySQL。在使用SQL Server时,我使用核心标识作为成员身份,它在该配置中工作。当我将数据库迁移到MySQL时(使用MySQL工作台中的迁移向导),我在将新用户保存到数据库时开始收到以下错误: 找不到CLR类型“Microsoft.EntityFrameworkCore.Metadata.Internal.Property”与关系类型的映射 执行Cre
public IActionResult Register([FromBody]RegisterViewModel obj)
{
if (ModelState.IsValid)
{
IdentityUser user = new IdentityUser();
user.UserName = obj.Username;
user.Email = obj.Email;
IdentityResult result = _userManager.CreateAsync(user, obj.Password).Result;
}
}
以下是我的DbContext类:
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
namespace PilotMaltApiCore.Models
{
public class PilotDbContext : IdentityDbContext<IdentityUser, IdentityRole, string>
{
public PilotDbContext(DbContextOptions<PilotDbContext> options)
: base(options)
{
//nothing here
}
public DbSet<Batch> Batches { get; set; }
public DbSet<Bag> Bags { get; set; }
public DbSet<Vendor> Vendors { get; set; }
public DbSet<Variety> Varieties { get; set; }
}
}
使用Microsoft.AspNetCore.Identity.EntityFrameworkCore;
使用Microsoft.EntityFrameworkCore;
命名空间PilotMaltApiCore.Models
{
公共类PilotDbContext:IdentityDbContext
{
公共PilotDbContext(DbContextOptions选项)
:基本(选项)
{
//这里什么都没有
}
公共数据库集批处理{get;set;}
公共数据库集包{get;set;}
公共数据库集供应商{get;set;}
公共DbSet变量{get;set;}
}
}
我想这可能与SQLServer和MySQL之间的数据类型不同有关。以下是SQL Server表:
下面是MySQL工作台中使用迁移向导后的MySQL表:
请记住,在使用SQL Server时,所有代码都运行良好。非常感谢您的帮助,谢谢 本教程对我来说效果很好:
我将varchar字段的字符集更改为utf8mb4,从而解决了这个问题 我还选择使用Sapient Guardian版本的MySql provider for.net Core,事实证明,该版本的问题比MySql版本小得多。可以下载