.Net Core - Feil 42P07 i migrering eksisterer databasen pgSQL

stemmer
0

Jeg har problemer med å migrere til en eksisterende database,

Dette er min feil:

Det oppstod en feil under start av applikasjonen. PostgresException: 42P07: forholdet "Contaminacao" eksisterer allerede Npgsql.NpgsqlConnector <> c__DisplayClass161_0 <g__ReadMessageLong | 0> d.MoveNext ()

PostgresEksepsjon: 42P07: forholdet "Contaminacao" eksisterer allerede

Bilde i VS2017: legg

Problemet oppstår med enheten 'Contaminacao' og 'Contaminacao_Regra', der 'Contaminacao_Regra' har to 'kontaminering' fk. Se:

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

Siden jeg må sette to fk fra samme enhet, foretok jeg denne konfigurasjonen:

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

        }

Etter at jeg hadde gjort disse innstillingene, hadde jeg feilen jeg nevnte ovenfor. Det samme problemet ble nevnt her , men det hjalp meg ikke så mye.

Husk at feilen bare oppstår når banken allerede eksisterer.

vet noen hvordan jeg skal løse ???

Publisert på 18/05/2020 klokken 19:52
kilden bruker
På andre språk...                            

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