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 "Чтобы удалить этого человека, удалите все связи с ним";
            }
        }
Exemple #2
0
        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);
 }
Exemple #9
0
 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;
         }
     }
 }
Exemple #10
0
        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;
                    }
                }
            }
        }
Exemple #11
0
 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;
             }
         }
     }
 }
Exemple #12
0
        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>>();
            }
        }