gpt4 book ai didi

mysql - 实体类型 'IdentityUser' 是层次结构的一部分,但没有配置鉴别器值

转载 作者:行者123 更新时间:2023-11-29 01:15:54 25 4
gpt4 key购买 nike

我正在尝试使用 EntityFrameworkCore (1.0.1) 将 .NET Core 1.1 MVC 应用程序从 SQLite ("Microsoft.EntityFrameworkCore.Sqlite": "1.0.1") 迁移到 MySQL ("MySql.Data.EntityFrameworkCore": "7.0.6-IR31").

我的上下文正在扩展 IdentityDbContext,并且在使用 Sqlite 运行 Database.EnsureCreated() 时,AspNet 表(RoleClaims、角色、用户等)会自动生成配置。

使用 MySQL 连接器,当我尝试运行 Update-DatabaseDatabase.EnsureCreated() 时,出现错误:

实体类型“IdentityUser”是层次结构的一部分,但没有配置鉴别器值。

我真的应该手动配置吗?如果是的话,怎么办?

上下文:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{

//DbSets here..

public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{

}

protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);

builder.Entity<IdentityUser>()
.HasDiscriminator<int>("Type")
.HasValue<ApplicationUser>(1);
}
}

应用用户:

public class ApplicationUser : IdentityUser
{
public string Firstname { get; set; }
public string Lastname { get; set; }
public string Firmname { get; set; }
public string CVR { get; set; }
public string ATT { get; set; }
public string Telephone { get; set; }
public string Address { get; set; }
}

最佳答案

似乎 EntityFramework Core 的 MySQL 提供程序不会自动为派生类进行注册(其他提供程序会隐式执行),这就是您需要在代码中指定鉴别器的原因。

但是,由于 IdentityUser 不是抽象类,理论上它也可以被实例化和分配,MySQL 数据库提供程序也需要为它注册(即使在生产中永远不会有一个这个鉴别器的值)。

所以你也必须注册基类。

protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);

builder.Entity<IdentityUser>()
.HasDiscriminator<int>("Type")
.HasValue<IdentityUser>(0)
.HasValue<ApplicationUser>(1);
}

关于mysql - 实体类型 'IdentityUser' 是层次结构的一部分,但没有配置鉴别器值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41351581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com