@murad88

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

Есть след. код.
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, чтоб все его свойства и связи были заменены на новые значения.
Как вариант можно удалить запись и все его связи (каскадное удаление), затем добавить новую запись.
Или нужно вручную пробегаться по по всем полям и связям и менять значения (код получиться довольно громоздкий, особенно если много связей).
  • Вопрос задан
  • 4915 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Gilga
db.Switchers.AddOrUpdate(switcher);
db.SaveChanges();

Или
db.Entry(switcher).State = EntityState.Modified;
db.SaveChanges();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы