實體類型“IdentityUser”是層次結構的一部分,但沒有配置鑑別器值

asp.net-core entity-framework-core mysql mysql-connector

我正在嘗試使用EntiteFrameworkCore(1.0.1)從SQLite( "Microsoft.EntityFrameworkCore.Sqlite": "1.0.1" )遷移.NET Core 1.1 MVC應用程序到MySQL( "MySql.Data.EntityFrameworkCore": "7.0.6-IR31" )。

我的上下文是擴展IdentityDbContext ,當使用Sqlite運行Database.EnsureCreated() ,會自動配置AspNet表(RoleClaims,Roles,Users等)。

使用MySQL連接器,當我嘗試運行Update-DatabaseDatabase.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);
    }
}

ApplicationUser:

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 Provider for EntityFramework Core不會自動為派生類(其他提供者隱式執行)註冊,這就是為什麼需要代碼中的鑑別器。

但是,由於IdentityUser不是一個抽像類,理論上它也可以實例化並分配,MySQL數據庫提供程序也需要對它進行註冊(即使在生產中也不會有這個鑑別器的值)。

所以你必須註冊基類。

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

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


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow