public sbyte ChangeParam([FromBody]DevParam devInfo) { sbyte newValue = -1; if (devInfo.Cmd == "onoff") { switch (devInfo.Type) { case "Lamp": dev = db.Lamps.Find(devInfo.Id); break; case "Fan": dev = db.Fans.Include("Speed").FirstOrDefault(p => p.Id == devInfo.Id); break; case "Louvers": dev = db.LouversSet.Include("Open").FirstOrDefault(p => p.Id == devInfo.Id); break; case "Tv": dev = db.TvSet.Include("Volume").FirstOrDefault(p => p.Id == devInfo.Id); break; } dev.OnOff(); if (dev.State) { newValue = 1; } else { newValue = 0; } } else { switch (devInfo.Type) { case "Fan": dev = db.Fans.Include("Speed").FirstOrDefault(p => p.Id == devInfo.Id); if (devInfo.Cmd == "down") newValue = (sbyte)((Fan)dev).Speed.Down(); else newValue = (sbyte)((Fan)dev).Speed.Up(); break; case "Louvers": dev = db.LouversSet.Include("Open").FirstOrDefault(p => p.Id == devInfo.Id); if (devInfo.Cmd == "down") newValue = (sbyte)((Louvers)dev).Open.Down(); else newValue = (sbyte)((Louvers)dev).Open.Up(); break; case "Tv": switch (devInfo.Param) { case "Volume": dev = db.TvSet.Include("Volume").FirstOrDefault(p => p.Id == devInfo.Id); if (devInfo.Cmd == "down") newValue = (sbyte)((Tv)dev).Volume.Down(); else newValue = (sbyte)((Tv)dev).Volume.Up(); break; case "Program": dev = db.TvSet.Find(devInfo.Id); if (devInfo.Cmd == "down") newValue = (sbyte)((Tv)dev).PreviousChannel(); else newValue = (sbyte)((Tv)dev).NextChannel(); break; } break; } } if (dev != null) { try { db.Entry(dev).State = EntityState.Modified; db.SaveChanges(); return newValue; } catch { return -1; } } else { return -1; } }