Не удалось выполнить ограничение EF Core при обновлении - PullRequest
0 голосов
/ 13 апреля 2019

У меня довольно сложная структура объектов, но я уже успел добавить и прочитать объекты. Теперь я хочу обновить сущность, но я получаю:

SqliteException: ошибка SQLite 19: «Не удалось выполнить ограничение UNIQUE: Allergies.AllergyId».

Есть идеи, почему это так?

Класс пациента:

public class Patient : IEquatable<Patient>
{
    public int PatientId { get; set; }
    public string Name { get; set; }
    [NotMapped]
    public ObservableCollection<Allergy> Allergies { get; set; }
    [NotMapped]
    public ObservableCollection<Disease> Diseases { get; set; }

    [NotMapped]
    private List<PatientDisease> _patientDiseases;

    public List<PatientDisease> PatientDiseases {
        get { return _patientDiseases = _patientDiseases ?? new List<PatientDisease>(); }
        set { _patientDiseases = value; this.Diseases = new ObservableCollection<Disease>(value.Select(x => x.Disease).ToList()); }
    }

    [NotMapped]
    private List<PatientAllergy> _patientAllergies;

    public List<PatientAllergy> PatientAllergies {
        get { return _patientAllergies = _patientAllergies ?? new List<PatientAllergy>(); }
        set { _patientAllergies = value; this.Allergies = new ObservableCollection<Allergy>(value.Select( x => x.Allergy).ToList()); }
    }

    public bool Equals(Patient other)
    {
        if (other is null)
            return false;

        return this.PatientId == other.PatientId;
    }

    public override bool Equals(object obj) => Equals(obj as Patient);
    public override int GetHashCode() => (PatientId).GetHashCode();
}

Класс аллергии:

public class Allergy : IEquatable<Allergy>
{
    public int AllergyId { get; set; }
    public string Name { get; set; }

    public List<MedicationAllergy> MedicationAllergies { get; set;}
    public List<PatientAllergy> PatientAllergies { get; set; }

    public bool Equals(Allergy other)
    {
        if (other is null)
            return false;

        return this.AllergyId == other.AllergyId;
    }

    public override bool Equals(object obj) => Equals(obj as Allergy);
    public override int GetHashCode() => (AllergyId).GetHashCode();
}

Метод сборщика, где происходит обновление:

public void EditPatient(Patient SelectedPatient)
    {
        using (var db = new DatabaseContext())
        {
            var entity = db.Patients.Include(x => x.PatientAllergies)
                    .ThenInclude(x => x.Allergy)
                    .Include(x => x.PatientDiseases)
                    .ThenInclude(x => x.Disease)
                    .ThenInclude(x => x.DiseaseMedications)
                    .ThenInclude(x => x.Medication)
                    .ThenInclude(x => x.MedicationAllergies)
                    .ThenInclude(x => x.Allergy)
                    .FirstOrDefault(item => item.PatientId == SelectedPatient.PatientId);

            if (entity != null)
            {
                entity.Name = SelectedPatient.Name;
                entity.PatientAllergies = SelectedPatient.PatientAllergies;
                entity.PatientDiseases = SelectedPatient.PatientDiseases;
                entity.Allergies = SelectedPatient.Allergies;
                entity.Diseases = SelectedPatient.Diseases;

                db.Patients.Update(entity);
                db.SaveChanges();    
            }             
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...