public void SaveDependency(FieldFieldDependency dependency) { var fieldsToCreate = dependency.RelatedFields.Where(f => f.Id <= 0).ToList(); //jeśli jakieś pola zależne nie istnieją->tworzymy je fieldsToCreate.ForEach(currentField => _context.Field.Add(currentField)); _context.SaveChanges(); //bład-> pobranie na nowo wszystkich pól zależnych z contekstu(różne żądania, EF gubi tracking) var idsAllRelatedFields = dependency.RelatedFields.Select(f => f.Id).ToList(); dependency.RelatedFields = _context.Field.Where(f => idsAllRelatedFields.Contains(f.Id)).ToList(); dependency.ThisField = _context.Field.FirstOrDefault(f => f.Id == dependency.Id); //bład-> pobranie na nowo wszystkich pól zależnych z contekstu //czy zależność już istnieje FieldFieldDependency existingDependency = Dependencies .FirstOrDefault(dep => (dep.Id == dependency.Id) && (dep.ActivationValue == dependency.ActivationValue) && (dep.DependencyType == dependency.DependencyType)); if (existingDependency != null) //czyli istnieje { existingDependency.RelatedFields.AddRange(dependency.RelatedFields); _context.Dependencies.Update(existingDependency); } else { _context.Dependencies.Add(dependency); } _context.SaveChanges(); }
public static void SeedDependencies(IFieldDependenciesRepository repository, FormGeneratorContext context) { Field korzen = context.Field.FirstOrDefault(f => f.Id == 1); var fields = context.Field.Where(f => f.Id != 1).ToList(); FieldFieldDependency dep1 = new FieldFieldDependency(korzen, FieldFieldDependencyType.FieldDuplication, "22"); fields.ForEach(f => dep1.RelatedFields.Add(f)); var test = repository.GetAllDependFields(); repository.SaveDependency(dep1); }