首页 > 解决方案 > 由于不同的上下文缺少 PK,Entity Framework Core 迁移失败

问题描述

  public class InventarioContext : DbContext
{
    public InventarioContext() : base()
    {
        // I'm a default constructor!
    }

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

    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {

    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
    }

    // Inventario Ciclico
    public DbSet<InventarioConfiguracao> InventarioConfiguracoes { get; set; }
    public DbSet<InventarioRegisto> InventarioRegistos { get; set; }
    public DbSet<Etiqueta> Etiquetas { get; set; }
    public DbSet<Localizacao> Localizacoes { get; set; }
    public DbSet<Armazem> Armazens { get; set; }
    public DbSet<Operador> Operadores { get; set; }
}

我的第二个背景

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

    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {

    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<UserRole>()
            .HasKey(ur => new { ur.UserId, ur.RoleId });

        modelBuilder.Entity<UserRole>()
            .HasOne(ur => ur.User)
            .WithMany(u => u.UserRoles)
            .HasForeignKey(ur => ur.UserId);

        modelBuilder.Entity<UserRole>()
            .HasOne(ur => ur.Role)
            .WithMany(r => r.UserRoles)
            .HasForeignKey(ur => ur.RoleId);

        modelBuilder.Entity<User>()
            .HasIndex(u => u.Username)
            .IsUnique();

        modelBuilder.Entity<Colaborador>()
            .HasIndex(c => c.Email)
            .IsUnique();

        modelBuilder.Entity<Role>()
            .HasIndex(r => r.Nome)
            .IsUnique();

        modelBuilder.Entity<Consumo>()
            .HasIndex(c => new { c.Referencia, c.UAP })
            .IsUnique();

        modelBuilder.Entity<Parametro>()
            .HasIndex(p => new { p.Referencia, p.UAP })
            .IsUnique();

        modelBuilder.Entity<Horario>()
            .HasIndex(h => new { h.Inicio, h.Fim, h.Uap })
            .IsUnique();

        modelBuilder.Entity<Feriado>()
            .HasIndex(f => f.DataInicio)
            .IsUnique();

        modelBuilder.Entity<Feriado>()
            .HasIndex(f => f.DataFim)
            .IsUnique();

        modelBuilder.Entity<Horario>()
            .HasIndex(h => h.IsDeleted)
            .HasName("XI_hHorarios_IsDeleted")
            .HasFilter("([IsDeleted]=(0))");

    }

    // Entitites
    public DbSet<Colaborador> Colaboradores { get; set; }
    public DbSet<User> Users { get; set; }
    public DbSet<Role> Roles { get; set; }
    public DbSet<UserRole> UserRoles { get; set; }

    // Abastecimento
    public DbSet<Parametro> Parametros { get; set; }
    public DbSet<ListaAbastecimento> ListasAbastecimento { get; set; }
    public DbSet<Referencia> Referencias { get; set; }
    public DbSet<Consumo> Consumos { get; set; }
    public DbSet<Feriado> Feriados { get; set; }
    public DbSet<Horario> Horarios { get; set; }
    public DbSet<Uap> Uaps { get; set; }

    public DbSet<Calendario> Calendario { get; set; }
    public object InventarioConfiguracoes { get; internal set; }
}

如您所见,它们中的任何一个都没有关系。

我什至试图删除外键属性

Inventariocontext 上的 ColaboradorId

不管它不会让我为 InventarioContext 创建迁移,当它已经从其他上下文创建时,它总是说缺少 UserRoles 的主键。

标签: c#entity-framework-core

解决方案


推荐阅读