Entity - Multiplicity constraint violated

2

I'm not understanding the reason for this error in Entity. Could you give me a help?

  

Error: The role 'OccurrenceHistorical_Target_Operation' of the relationship 'MoradaWeb.Models.Historical_Operation' has multiplicity 1 or 0..1.

Model:

public partial class Ocorrencia
{
    [Key]
    public int id { get; set; }
    public Pessoa Pessoa { get; set; }
    public int? PessoaId { get; set; }
    public virtual ICollection<OcorrenciaHistorico> Historico { get; set; }

    public Ocorrencia()
    {
        Historico = new HashSet<OcorrenciaHistorico>();
    }
}

public class Pessoa
{
    [Key]
    public int id { get; set; }
    public string nome { get; set; }
}

public class Historico
{
    [Key]
    public int id { get; set; }
    public DateTime DataCadastro { get; set; }

    public Pessoa pessoa { get; set; }
    public int pessoaId { get; set; }

    public int OcorrenciaId { get; set; }
    public virtual Ocorrencia Ocorrencia { get; set; }
}

The error happens when saving after adding an object to the history.

Ocorrencia.Historico.Add(new OcorrenciaHistorico() { Acao = "Criação", DataCadastro = DateTime.Now, Ocorrencia = Ocorrencia, pessoa = pessoa });
    
asked by anonymous 29.03.2017 / 19:50

1 answer

2

The context is understanding that pessoa is a new Person, not an existing person.

It's best to do this:

var pessoa = db.Pessoas.Include(p => p.Ocorrencias).Where(...);
var ocorrencia = pessoa.Ocorrencias.Where(...);
ocorrencia.Historico.Add(new OcorrenciaHistorico() { Acao = "Criação", DataCadastro = DateTime.Now });
db.Entry(ocorrencia).State = EntityState.Modified;
db.SaveChanges();

Or by selecting for Occurrence as well.

var ocorrencia = db.Ocorrencias.Include(o => o.Pessoa).Where(...);
ocorrencia.Historico.Add(new OcorrenciaHistorico() { Acao = "Criação", DataCadastro = DateTime.Now });
db.Entry(ocorrencia).State = EntityState.Modified;
db.SaveChanges();
    
29.03.2017 / 23:21