Как правильно обновлять запись в Entity Framework 6 ?

Рейтинг: 2Ответов: 1Опубликовано: 22.10.2014

Есть след. код.

public class Switcher
    {
        [Key]
        public int ID { get; set; }
        [Required]
        public string Name { get; set; }
        [Required]
        public string IP { get; set; }
        [Required]
        public SwitcherModel Model { get; set; }
        [Required]
        public string FirmwareVersion { get; set; }
        public List<Port> ScanPorts { get; set; }
    }

public class Port
    {
        [Key]
        public int ID { get; set; }
        public string Name { get; set; }
        [Required]
        public byte Number { get; set; }
        [NotMapped]
        public bool IsLink { get; set; }
    }

public void UpdateSwitcher(Switcher switcher)
        {
            using (var db = new MonitoringSwitcherContext())
                {
                    var switcherFind = db.Switchers.Find(switcher.ID);

                    if (switcherFind == null)
                        db.Switchers.Add(switcher);
                    else
                    {
                        // Проходится по всем полям и связям
                        switcherFind.Name = switcher.Name;
                        switcherFind.IP = switcher.IP;
                        switcherFind.Model = switcher.Model;
                        switcherFind.FirmwareVersion = switcher.FirmwareVersion;

                        foreach (var port in switcher.ScanPorts)
                        {
                            var portExist = switcherFind.ScanPorts.Find(p => p.ID == port.ID);

                            if (portExist != null)
                            {
                                portExist.Name = port.Name;
                                portExist.Number = port.Number;
                            }
                            else
                                switcherFind.ScanPorts.Add(port);
                        }
                    }
                    db.SaveChanges();
            }
    }

Как правильно обновить запись Switchers, чтоб все его свойства и связи были заменены на новые значения.

Как вариант можно удалить запись и все его связи (каскадное удаление), затем добавить новую запись.

Или нужно вручную пробегаться по по всем полям и связям и менять значения (код получиться довольно громоздкий, особенно если много связей).

Ответы

Ответов пока нет.