Кросс-контекстный внешний ключ в ядре EntityFramework - PullRequest
0 голосов
/ 05 апреля 2020

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

У меня есть два DbContexts, ApplicationDbContext и BankDbContext. ApplicationDbContext имеет:

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

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

BankDbContext имеет:

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

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

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

А AccountModel имеет:

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

    public string AccountName { get; set; }

    public string AccountNumber { get; set; }

    public string UserId { get; set; }

    public virtual IdentityUser User { get; set; }
}

ApplicationDbContext создает много таблиц ; один из них AspNetUsers (он сохраняет данные пользователя). Когда я обновляю таблицу новыми миграциями, она создает все таблицы из таблиц ApplicationDbContext и AccountModel, но по некоторым причинам также создает таблицу IdentityUser. Этого не должно быть, потому что ApplicationDbContext уже создает его.

Я попытался добавить аннотацию атрибута ForeignKey["AspNetUsers"] поверх public virtual IdentityUser User { get; set; }, но он все еще создает эту таблицу.

приведенный выше код будет работать, когда я добавлю Accounts DbSet к ApplicationDbContext, например:

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

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
    }
    public DbSet<AccountModel> Accounts { get; set; }
}

В двух словах, я пытаюсь добавить ссылку из одного контекста в другой в той же базе данных, но это просто создает дубликаты таблиц с разными именами. Любая помощь в этом приветствуется.

...