.Net Core - Error 42P07 in Migration exist database pgSQL

2020-05-19 asp.net-mvc postgresql .net-core

I'm having trouble migrating to an existing database,

This is my Error:

An error occurred while starting the application. PostgresException: 42P07: relation "Contaminacao" already exists Npgsql.NpgsqlConnector+<>c__DisplayClass161_0+<g__ReadMessageLong|0>d.MoveNext()

PostgresException: 42P07: relation "Contaminacao" already exists

Image in VS2017: enter image description here

The problem occurs with the entity 'Contaminacao' and 'Contaminacao_Regra', where 'Contaminacao_Regra' has two 'Contamination' fk. Look:

'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;
        }
    }

As I have to put two fk from the same entity, I made this configuration:

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);

        }

After I made these settings, I had the error I mentioned above. This same problem was mentioned here, but it didn't help me much.

Remembering that the error occurs only when the bank already exists.

does anyone know how to solve ???

UPDATE

enter image description here

FK_IdCorAntes and FK_IdCorDepois is Fk from 'Contaminacao'

Answers

Related