Повторяющаяся таблица создается при добавлении IdentityUser в качестве внешнего ключа в ASP. NET Core 3.1 - PullRequest
0 голосов
/ 31 марта 2020

Я использую PostgreSql в качестве базы данных. Я пытаюсь добавить внешний ключ в таблицу пользователя, но вместо этого создается дублирующаяся таблица IdentityUser.

Я унаследовал IdentityDbContext<IdentityUser> для ApplicationDbContext, код которого:

public class ApplicationDbContext : IdentityDbContext<IdentityUser>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

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

Это позволяет создать все таблицы следующим образом:

enter image description here

Я пытаюсь создать модель, в которой пользователь использует внешний ключ. выполнив:

public class AccountModel
{
    [Key]
    public string Id { get; set; } = Guid.NewGuid().ToString();

    public string AccountName { get; set; }

    public string AccountNumber { get; set; }

    public BankModel BankDetails { get; set; }

    public IdentityUser User { get; set; }
}

И это DBContext

public class AccountDbContext: DbContext
{
    public AccountDbContext(DbContextOptions<AccountDbContext> options) : base(options)
    {

    }

    public DbSet<AccountModel> Accounts { get; set; }
    public DbSet<BankModel> Banks { get; set; }
}

Глядя на сообщение - { ссылка }, в принятом ответе используется ApplicationUser, который я считаю аналогично IdentityUser, когда я выполняю миграцию, вместо добавления FK к AspNetUsers создается новая таблица с именем IdentityUser, а затем FK добавляется в эту вновь созданную таблицу. Что выглядит как:

enter image description here

Я не уверен, что я делаю неправильно. Справка!

Обновление

Я пробовал этот код на сервере Azure SQL, и он все еще вызывал ту же проблему. Кроме того, я добавил [ForeignKey("AspNetUser")]

public class AccountModel
{
    [Key]
    public string Id { get; set; } = Guid.NewGuid().ToString();

    public string AccountName { get; set; }

    public string AccountNumber { get; set; }

    public BankModel BankDetails { get; set; }

    [ForeignKey("AspNetUsers")]
    public IdentityUser User { get; set; }
}

Я все еще получаю ту же проблему.


Обновление 2

Связь между два разных контекста, то есть ApplicationDbContext и AccountDbContext. Добавление public DbSet<AccountModel> Accounts { get; set; } к ApplicationDbContext работает нормально и автоматически добавляет отношение FK.

1 Ответ

2 голосов
/ 31 марта 2020

Вам необходимо определить отношения между AccountModel и IdentityUser в конструкторе моделей.

Что-то вроде

    protected override void OnModelCreating(ModelBuilder builder)
    {
        builder.Entity<AccountModel>()
            .HasOne(accountModel=> accountModel.User);

        base.OnModelCreating(builder);
    }

См. Здесь информацию о одиночное свойство навигации и внешние ключи.

...