实体类型 'IdentityUser' 是层次结构的一部分,但没有配置鉴别器值
The entity type 'IdentityUser' is part of a hierarchy, but does not have a discriminator value configured
我正在尝试使用 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
,当 运行 宁 Database.EnsureCreated()
,使用 Sqlite 时,AspNet 表(RoleClaims、角色、用户等)被自动配置。
使用 MySQL-连接器,当我尝试 运行 Update-Database
或 Database.EnsureCreated()
时,我得到错误:
The entity type 'IdentityUser' is part of a hierarchy, but does not have a discriminator value configured.
我真的应该手动配置吗?如果是的话,怎么办?
上下文:
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; }
}
MySQL EntityFramework Core 的提供者似乎不会自动为派生的 classes 进行注册(其他提供者隐式地这样做),这就是为什么你需要在代码中指定鉴别器。
但是,由于 IdentityUser
不是抽象的 class,理论上它也可以实例化和分配,并且 MySQL 数据库提供程序也需要为它注册(即使在生产中,这个鉴别器永远不会有价值)。
所以你也必须注册基地class。
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<IdentityUser>()
.HasDiscriminator<int>("Type")
.HasValue<IdentityUser>(0)
.HasValue<ApplicationUser>(1);
}
我正在尝试使用 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
,当 运行 宁 Database.EnsureCreated()
,使用 Sqlite 时,AspNet 表(RoleClaims、角色、用户等)被自动配置。
使用 MySQL-连接器,当我尝试 运行 Update-Database
或 Database.EnsureCreated()
时,我得到错误:
The entity type 'IdentityUser' is part of a hierarchy, but does not have a discriminator value configured.
我真的应该手动配置吗?如果是的话,怎么办?
上下文:
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; }
}
MySQL EntityFramework Core 的提供者似乎不会自动为派生的 classes 进行注册(其他提供者隐式地这样做),这就是为什么你需要在代码中指定鉴别器。
但是,由于 IdentityUser
不是抽象的 class,理论上它也可以实例化和分配,并且 MySQL 数据库提供程序也需要为它注册(即使在生产中,这个鉴别器永远不会有价值)。
所以你也必须注册基地class。
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<IdentityUser>()
.HasDiscriminator<int>("Type")
.HasValue<IdentityUser>(0)
.HasValue<ApplicationUser>(1);
}