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à
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?