public static string Delete(Person person) { using (var db = new PersonContext()) { if (CanRemovePerson(person)) { //удаляем человека var entry = db.Entry(person); if (entry.State == EntityState.Detached) { db.Persons.Attach(person); db.Persons.Remove(person); } //удаляем все связи с ним var relations = db.Relatives.Where(r => (r.PersonId == person.Id) || (r.RelativeOfPersonId == person.Id)); foreach (var relation in relations) { db.Relatives.Remove(relation); } db.SaveChanges(); return null; } return "Чтобы удалить этого человека, удалите все связи с ним"; } }
public void AddNewFamilyMember(Person person, KindOfRelative kindOfRelative) { var list = new List<KindOfRelative> {kindOfRelative}; var checkedVertex = GetCheckedVertex(); if (checkedVertex != null) { list.Add(ConvertTo.KindOfRelative(checkedVertex.WhoIsRelativeTextBlock.Text)); } var vertex = new Vertex { DataContext = person, WhoIsRelativeTextBlock = {Text = ConvertTo.String(RelationshipsDictionary.GetKindOfRelative(list))} }; TreeCanvas.Children.Add(vertex); var point = CalculateCoordinates(vertex, checkedVertex, kindOfRelative); AddRelationship(vertex, checkedVertex, kindOfRelative); vertex.IsChecked = true; if ((point.X > ActualWidth) && ((double.IsNaN(Width)) || (point.X > Width))) { Width = point.X; } if ((point.Y > ActualHeight) && ((double.IsNaN(Height)) || (point.X > Height))) { Height = point.Y; } JustOneVertexChecked(); RepositionAllObjects(); }
public static string Add(Person person) { using (var db = new PersonContext()) { if ((person != null) && (GetPerson(person.Id) == null)) { db.Persons.Add(person); db.SaveChanges(); return "Добавление выполнено успешно"; } return "Такой человек уже существует"; } }
/// <summary> /// Проверяет, есть ли у человека родственные связи /// Если есть связь только с одним человеком, то его можно удалять /// </summary> private static bool CanRemovePerson(Person person) { using (var db = new PersonContext()) { return db.Relatives.Count(r => r.PersonId == person.Id) == 0; } }
public static void Update(Person newPerson) { using (var db = new PersonContext()) { var person = db.Persons.FirstOrDefault(p => p.Id == newPerson.Id); if (person != null) { person.FirstName = newPerson.FirstName; person.Patronymic = newPerson.Patronymic; person.SurName = newPerson.SurName; person.BirthDay = newPerson.BirthDay; person.DeadDay = newPerson.DeadDay; person.Biography = newPerson.Biography; person.Photo = newPerson.Photo; } db.SaveChanges(); } }
public static void Update(Person newPerson) { EntityFrameworkDAL.Update(newPerson); }
/// <summary> /// Возвращает результат удаления /// </summary> public static string Delete(Person person) { return EntityFrameworkDAL.Delete(person); }
public static string Add(Person person) { return EntityFrameworkDAL.Add(person); }
public void UpdateFamilyMember(Person person) { for (int i = 0; i < TreeCanvas.Children.Count; i++) { if ((TreeCanvas.Children[i] is Vertex) && ((Vertex) TreeCanvas.Children[i]).IsChecked) { ((Vertex) TreeCanvas.Children[i]).DataContext = person; break; } } }
public void RemoveFamilyMember(Person person) { foreach (var child in TreeCanvas.Children) { if (child is Vertex) { var vertexPerson = (Person) ((Vertex) child).DataContext; if ((vertexPerson != null) && (vertexPerson.Id == person.Id)) { var vertex = (Vertex) child; TreeCanvas.Children.Remove(vertex); var relationship = GetRelationship(vertex); TreeCanvas.Children.Remove(relationship); break; } } } }
public void Check(Person person) { if (person != null) { for (int i = 0; i < TreeCanvas.Children.Count; i++) { if ((TreeCanvas.Children[i] is Vertex) && (((Person) (((Vertex) TreeCanvas.Children[i]).DataContext)).Id == person.Id)) { ((Vertex) TreeCanvas.Children[i]).IsChecked = true; JustOneVertexChecked(); return; } } } }
private void DrawAllRelatives(Person person) { var queue = new Queue<Person>(); queue.Enqueue(person); //в этом списке будет храниться каждый родственник var visitedPoints = new List<Person> { person }; //добавляю себя туда Tree.AddNewFamilyMember(person, KindOfRelative.Me); Person point; Dictionary<Person, KindOfRelative> immediateRelatives; var allRelatives = new Dictionary<Person, List<KindOfRelative>>(); var addingRelatives = new Dictionary<Person, List<KindOfRelative>>(); var relationsList = new List<KindOfRelative>(); Person relative; while (queue.Count > 0)//здесь получаем с помощью обхода графа в ширину путь каждом родственнику { point = queue.Dequeue(); Tree.Check(point); immediateRelatives = BusinessComponent.GetImmediateRelatives(point.Id); foreach (var immediateRelative in immediateRelatives) { relative = immediateRelative.Key; queue.Enqueue(relative); visitedPoints.Add(relative); relationsList.Add(immediateRelative.Value); if (allRelatives.ContainsKey(point)) { var list = allRelatives[point]; relationsList.AddRange(list); } allRelatives.Add(relative, relationsList); addingRelatives.Add(relative, relationsList); relationsList = new List<KindOfRelative>(); } Tree.AddNewFamilyMembers(addingRelatives); addingRelatives = new Dictionary<Person, List<KindOfRelative>>(); } }