Есть след. код.
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, чтоб все его свойства и связи были заменены на новые значения.
Как вариант можно удалить запись и все его связи (каскадное удаление), затем добавить новую запись.
Или нужно вручную пробегаться по по всем полям и связям и менять значения (код получиться довольно громоздкий, особенно если много связей).