.Net Core - Errore 42P07 in Migration esiste database pgSQL

voti
0

Sto avendo problemi a migrare in un database esistente,

Questo è il mio errore:

Si è verificato un errore durante l'avvio dell'applicazione. PostgresException: 42P07: la relazione Contaminacao esiste già Npgsql.NpgsqlConnettore <>c__VisualizzazioneClass161_0 <g__MessaggioLungo|0>d.MoveNext()

PostgresException: 42P07: la relazione Contaminacao esiste già

Immagine in VS2017: enter

Il problema si verifica con l'entità 'Contaminacao' e 'Contaminacao_Regra', dove 'Contaminacao_Regra' ha due 'Contaminazione' fk. Guardate:

Contaminacao

public class Contaminacao
    {
        public int Id { get; set; }
        [Required(ErrorMessage = Campo {0} é obrigatório)] // {0} é o campo Name
        [StringLength(8, MinimumLength = 4, ErrorMessage = O campo {0} deve ter entre {2} a {1} caracteres)]
        public string Cor { get; set; }
        [Display(Name = Descrição)]
        [StringLength(200, MinimumLength = 5, ErrorMessage = O campo {0} deve ter entre {2} a {1} caracteres)]
        public string Descricao { get; set; }

        public virtual ICollection<Contaminacao_Regra> Anterior_Contaminacao_Regras { get; set; } = new List<Contaminacao_Regra>();
        public virtual ICollection<Contaminacao_Regra> Proxima_Contaminacao_Regras { get; set; } = new List<Contaminacao_Regra>();

        public Contaminacao()
        {
        }

        public Contaminacao(int id, string cor, string descricao)
        {
            Id = id;
            Cor = cor;
            Descricao = descricao;
        }

        public Contaminacao(string cor, string descricao)
        {
            Cor = cor;
            Descricao = descricao;
        }
    }

Contaminacao_Regra

public class Contaminacao_Regra
    {
        public int Id { get; set; }
        [StringLength(200, MinimumLength = 5, ErrorMessage = O campo {0} deve ter entre {2} a {1} caracteres)]
        [Display(Name = Descrição)]
        public string Descricao { get; set; }
        public int Anterior_ContaminacaoId { get; set; }
        public int Proxima_ContaminacaoId { get; set; }

        [Display(Name = Contaminação Antes)]
        [ForeignKey(Anterior_ContaminacaoId)]
        //[Required(ErrorMessage = Campo {0} é obrigatório)]
        public virtual Contaminacao Contaminacao_Anterior { get; set; }

        [Display(Name = Contaminação Depois)]
        [ForeignKey(Proxima_ContaminacaoId)]
        //[Required(ErrorMessage = Campo {0} é obrigatório)]
        public virtual Contaminacao Contaminacao_Proxima { get; set; }

        public Contaminacao_Regra()
        {
        }

        public Contaminacao_Regra(int id, string descricao, Contaminacao contaminacao_Anterior, Contaminacao contaminacao_Proxima)
        {
            Id = id;
            Descricao = descricao;
            Contaminacao_Anterior = contaminacao_Anterior;
            Contaminacao_Proxima = contaminacao_Proxima;
        }

        public Contaminacao_Regra(int id, Contaminacao contaminacao_Anterior, Contaminacao contaminacao_Proxima)
        {
            Id = id;
            Contaminacao_Anterior = contaminacao_Anterior;
            Contaminacao_Proxima = contaminacao_Proxima;
        }

        public Contaminacao_Regra(string descricao, Contaminacao contaminacao_Anterior, Contaminacao contaminacao_Proxima)
        {
            Descricao = descricao;
            Contaminacao_Anterior = contaminacao_Anterior;
            Contaminacao_Proxima = contaminacao_Proxima;
        }
    }

Poiché devo mettere due fk della stessa entità, ho fatto questa configurazione:

protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            //Regra de Contaminação
            modelBuilder.Entity<Contaminacao_Regra>()
                   .HasOne(m => m.Contaminacao_Anterior)
                   .WithMany(t => t.Anterior_Contaminacao_Regras)
                   .HasForeignKey(m => m.Anterior_ContaminacaoId)
                   .OnDelete(DeleteBehavior.Restrict);

            modelBuilder.Entity<Contaminacao_Regra>()
                   .HasOne(m => m.Contaminacao_Proxima)
                   .WithMany(t => t.Proxima_Contaminacao_Regras)
                   .HasForeignKey(m => m.Proxima_ContaminacaoId)
                   .OnDelete(DeleteBehavior.Restrict);

            //Transferencia Produto
            modelBuilder.Entity<TransferenciaProduto>()
                   .HasOne(m => m.EstoqueOrigem)
                   .WithMany(t => t.Origem_TransferenciaProduto)
                   .HasForeignKey(m => m.EstoqueOrigemId)
                   .OnDelete(DeleteBehavior.Restrict);

            modelBuilder.Entity<TransferenciaProduto>()
                   .HasOne(m => m.EstoqueDestino)
                   .WithMany(t => t.Destino_TransferenciaProduto)
                   .HasForeignKey(m => m.EstoqueDestinoId)
                   .OnDelete(DeleteBehavior.Restrict);

            //Ordem Produção
            modelBuilder.Entity<OrdemProducao>()
                   .HasOne(m => m.Sequencia)
                   .WithOne(i => i.OrdemProducao)
                   .HasForeignKey<OrdemProducao_Sequencia>(b => b.OrdemProducaoId);

            // retira delete cascata
            var cascadeFKs = modelBuilder.Model.GetEntityTypes()
                .SelectMany(t => t.GetForeignKeys())
                .Where(fk => !fk.IsOwnership && fk.DeleteBehavior == DeleteBehavior.Cascade);

            foreach (var fk in cascadeFKs)
                fk.DeleteBehavior = DeleteBehavior.Restrict;

            base.OnModelCreating(modelBuilder);

        }

Dopo aver effettuato queste impostazioni, ho avuto l'errore di cui sopra. Questo stesso problema è stato menzionato qui, ma non mi ha aiutato molto.

Ricordando che l'errore si verifica solo quando la banca esiste già.

qualcuno sa come risolvere il problema?

È pubblicato 18/05/2020 alle 19:52
fonte dall'utente
In altre lingue...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more